Android危险权限一共9组24个权限
权限组 | 权限名 |
---|---|
CALENDAR | READ_CALENDAR、WRITE_CALENDAR |
CAMERA | CAMERA |
CONTACTS | READ_CONTACTS、WRITE_CONTACTS、GET_ACCOUNTS |
LOCATION | ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION |
MICROPHONE | RECORD_AUDIO |
PHONE | READ_PHONE_STATE、CALL_PHONE、READ_CALL_LOG、WRITE_CALL_LOG、ADD_VOICEMAIL、USE_SIP、PROCESS_OUTGOING_CALLS |
SENSORS | BODY_SENSORS |
SMS | SEND_SMS、RECEIVE_SMS、READ_SMS、RECEIVE_WAP_PUSH、RECEIVE_MMS |
STORAGE | READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE |
//判断是否有权限
ContextCompat.checkSelfPermission()
//请求权限
ActivityCompat.requestPermissions()
//权限回调
onRequestPermissionsResult()
模拟打电话权限
需要配置
<uses-permission android:name="android.permission.CALL_PHONE"/>
代码如下:
private Button btn_call_phone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
btn_call_phone = findViewById(R.id.btn_call_phone);
btn_call_phone.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_call_phone:
call();
break;
}
}
//权限处理方法
private void call() {
//判断用户是否已经授予了权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.
CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
//没有授予就向用户申请权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE},1);
} else {
CallPhone();
}
}
//打电话逻辑
@SuppressLint("MissingPermission")
private void CallPhone() {
Intent intent = new Intent(Intent.ACTION_CALL);
Uri uri = Uri.parse("tel:" + "10086");
intent.setData(uri);
startActivity(intent);
}
//申请权限的回调方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1:
if (grantResults[0]==PackageManager.PERMISSION_GRANTED){
CallPhone();
}else {
Toast.makeText(this,"权限未被授予",Toast.LENGTH_SHORT).show();
}
}
}
}
第一步利用ContextCompat.checkSelfPermission()方法判断权限是否已经授予了,如果没有就调用ActivityCompat.requestPermissions()方法去授予,如果已经授予了就调用打电话逻辑的方法。
第二步 onRequestPermissionsResult()是权限回调,对应ActivityCompat.requestPermissions()方法,申请权限就会回调这个方法。