因为android 6.0以上出于用户安全考虑,大部分涉及硬件环境的权限需要动态获取。
简单讲述获取多条动态权限并设置监听:
/**
* Created by Administrator on 2019/1/21.
*/
public class Premissions {
public static int permissioncpde=1;//标识
public static String[] per=new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE};
public static void showTakePermission(Activity activity, Context context) {
// 判断手机版本,如果低于6.0 则不用申请权限,直接拍照
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//7.0及以上
ActivityCompat.requestPermissions(activity,per, permissioncpde);//获取多条权限
}else{
}
}
//判断是否有指定权限
public static boolean isPermission(Activity activity, Context context,String perValue) {
// 判断手机版本,如果低于6.0 则不用申请权限,直接拍照
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//7.0及以上
if((ContextCompat.checkSelfPermission(context, perValue) != PackageManager.PERMISSION_GRANTED)) {
return false;
}else {
return true;
}
}else{
return true;
}
}
}
通过activity的onRequestPermissionsResult 监听权限是否通过
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==1){
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
if (i == 0){
}
} else {
Toast.makeText(MainActivity.this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show();
}
}
}
}
需要注意在
AndroidManifest 中任然要写权限 否则部分手机会报错