在安卓6.0以前想要调用系统权限,只需要在manifest.xml文件中提前配置好,在启动软件开始就会弹出各种申请的对话框,申请用户分配使用权限。android sdk 23之后也就是安卓6.0 开始,软件使用权限变为动态分配。在低版本的安卓系统中,开发软件需要一次性申请所有需要的应用权限,对于用户来说可能没人会特别注意申请了哪些具体的权限,都直接快速点击确定跳过引导页面。但其实软件本身并不会立即就调用已分配的功能。所以更加合适的方式应该是当软件本省需要某项权限的时候再去向用户申请。
示例代码:
低版本中申请一个打电话权限,非常简单,只需要配置权限属性一个intent 就可以搞定
private void call(String mobile){
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel:" + mobile));
mContext.startActivity(intent);
}
manifest.xml 中加入权限配置:
- <uses-permission android:name="android.permission.CALL_PHONE" />
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
intent.setData(Uri.parse("tel:" + number));
mContext.startActivity(intent);
public void onCall(String mobile){
this.mMobile = mobile;
if (Build.VERSION.SDK_INT >= 23) {
int checkCallPhonePermission = ContextCompat.checkSelfPermission(mContext,Manifest.permission.CALL_PHONE);
if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(mContext,new String[]{Manifest.permission.CALL_PHONE},REQUEST_CODE_ASK_CALL_PHONE);
return;
}else{
callDirectly(mobile);
}
} else {
callDirectly(mobile);
}
}
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_CALL_PHONE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
callDirectly(mobile);
} else {
// Permission Denied
Toast.makeText(MainActivity.this, "CALL_PHONE Denied", Toast.LENGTH_SHORT)
.show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}