本例判斷是否有錄音權限,主要是checkPermission方法,PackageInfo中可以獲取某個應用的權限清單
PackageManager pm = getPackageManager();
boolean permission = (PackageManager.PERMISSION_GRANTED ==
pm.checkPermission("android.permission.RECORD_AUDIO", "com.lkn.a11509.democollection"));
if (permission) {
Toast.makeText(MainActivity.this,"有錄音權限",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this,"木有錄音權限",Toast.LENGTH_SHORT).show();
}
try {
PackageInfo pack = pm.getPackageInfo("com.lkn.a11509.democollection",PackageManager.GET_PERMISSIONS);
String[] permissionStrings = pack.requestedPermissions;
String permissionReq = "";
for (String permissionString : permissionStrings) {
permissionReq = permissionReq + permissionString + "\n";
}
Toast.makeText(MainActivity.this,"權限清單--->" + permissionReq,Toast.LENGTH_SHORT).show();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
對於不同的機型,進入該APP權限管理的方法不同通過Build.MANUFACTURER來判斷,小米和魅族已自測有效,故貼在這裏
if (Build.MANUFACTURER.equals("Xiaomi")) {
Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
ComponentName componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
intent.setComponent(componentName);
intent.putExtra("extra_pkgname", BuildConfig.APPLICATION_ID);
startActivity(intent);
}else if (Build.MANUFACTURER.equals("Meizu")) {
Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("packageName", BuildConfig.APPLICATION_ID);
startActivity(intent);
}
20170817
更好的權限相關方法
https://github.com/Werb/PermissionsCheckerSample
自己Demo的使用
第一步 compile 'com.werb.permissionschecker:permissionschecker:0.0.1-beta2'
第二步 定義好需要檢查的權限列表,定義PermissionChecker
static final String[] PERMISSIONS = new String[]{
Manifest.permission.RECORD_AUDIO,
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE
};
private PermissionChecker permissionChecker;
第三步 初始化 permissionChecker = new PermissionChecker(this); // initialize,must need
第四步 處理我們的回調方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case PermissionChecker.PERMISSION_REQUEST_CODE:
if (permissionChecker.hasAllPermissionsGranted(grantResults)) {
//此處是我們獲取權限後的業務邏輯
} else {
permissionChecker.showDialog();
}
break;
}
}
第五步 在我們需要檢查權限的地方
if (permissionChecker.isLackPermissions(PERMISSIONS)) {
permissionChecker.requestPermissions();
} else {
//檢查是否有權限未被獲取,有則引導去請求獲取,沒有則進行我們獲取到相應權限後的業務邏輯
}