获取清单文件里所有声明的权限
private fun requestPermission() {
val packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)
val requestedPermissions = packageInfo.requestedPermissions
requestedPermissions.forEach { println("$it-------------------->") }
}
要申请的权限、未通过的权限集合
List<String> mPermissionList = new ArrayList();
String[] permissions = {
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.MODIFY_AUDIO_SETTINGS,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.WAKE_LOCK,
Manifest.permission.RECEIVE_BOOT_COMPLETED,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_SETTINGS
};
检测权限
mPermissionList.clear();
for (String perm : permissions) {
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
mPermissionList .add(perm);
//进入到这里代表没有权限.
}
}
if (mPermissionList.size() > 0) {
ActivityCompat.requestPermissions(this, mPermissionList.toArray(new String[mPermissionList.size()]), MY_PERMISSIONS_REQUEST_CODE);
}
重写回调
if (MY_PERMISSIONS_REQUEST_CODE == requestCode) {
for (int i = 0; i < grantResults.length; i++) {
System.out.println("权限 " + permissions[i]);
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
Toast.makeText(this, "请在设置中打开权限后继续", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, 200);
}
}
}