动态申请权限
2020-04-14 本文已影响0人
静享时光
Android中的权限分为系统权限和应用自定义权限,系统权限又分为正常权限和危险权限。
正常权限只需要在AndroidManifest.xml文件中申请即可。
对于危险性权限,在android6.0之前,我们只需要在AndroidManifest.xml文件中申请即可,但是在android6.0之后,不仅要在AndroidManifest.xml文件中申请,还需要在代码中进行动态申请。
在AndroidManifest.xml文件中申请:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
动态申请:
private static final int REQUEST_PERMISSION_CODE = 1;
//需要申请的权限
private static String[] PERMISSIONS_ALL = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.RECORD_AUDIO"
};
/**
* 动态申请权限
* <p>
* 这里没有进行一些判空处理,在实际开发中可以做一些判空处理
*/
private void requestPermissions() {
//判断是否是6.0及以上版本
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return;
}
StringBuilder builder = new StringBuilder();
for (String permission : PERMISSIONS_ALL) {
//判断所需权限是否已经已经动态申请
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
builder.append(permission).append(",");
}
}
String permissionNeedStr = builder.toString();
String[] permissionNeedArray = permissionNeedStr.split(",");
Log.e(TAG, "需要申请的数量: " + permissionNeedArray.length);
for (String data : permissionNeedArray) {
Log.e(TAG, "待申请权限: " + data);
}
//申请那些没有的权限,在activity中申请权限,权限授权结果会回调在acitvity中,我们可以在授权回调中做一些处理
ActivityCompat.requestPermissions(this, permissionNeedArray, REQUEST_PERMISSION_CODE);
}
/**
* activity权限授权结果回调
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
在Activity中动态申请之后,还可以更加需求在回调中进行处理。