安卓知识点-动态权限(A6,A13)
2:代码实现:检查-请求-响应。
·
1:清单文件AndroidManifest.xml声明:
<!--Android13以前 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32"></uses-permission>
<!--Android13 音乐和音频-->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO">
</uses-permission>
<!-- 照片和视频-->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES">
</uses-permission>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO">
</uses-permission>
2:代码实现:检查-请求-响应
安卓在6.0新增了危险权限动态申请,使用步骤如下:
checkSelfPermission():判断权限是否授权requestPermissions():发起权限的申请shouldShowRequestPermissionRationale():权限是否被永久拒绝onRequestPermissionsResult():权限授权回调
在非Activity页面:可以通过ContextCompat或者ActivityCompat.checkSelfPermission检查
2.1检查:
public Boolean checkPermission(Activity activity,String permissionName){
int result = ContextCompat.checkSelfPermission(activity, permissionName);
Log.d(TAG,"result:"+result);
if(result!= PackageManager.PERMISSION_GRANTED)
return true;//拒绝
else
return false;//同意
}
2.2请求:
// 2 :请求权限
Log.d(TAG,"Build.VERSION.SDK_INT:"+Build.VERSION.SDK_INT);
if (Build.VERSION.SDK_INT >= 23&&Build.VERSION.SDK_INT<33) {
Log.d(TAG,"32-请求存储权限");
if (checkPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)){
ActivityCompat.requestPermissions(MainActivity.this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE
}, 1);
}
}else if(Build.VERSION.SDK_INT >= 33){
Log.d(TAG,"33-请求新版权限");
if (checkPermission(MainActivity.this, Manifest.permission.READ_MEDIA_IMAGES)){
ActivityCompat.requestPermissions(MainActivity.this, new String[]{
Manifest.permission.READ_MEDIA_IMAGES
}, 1);
}
} else {
Toast.makeText(MainActivity.this, "直接进行逻辑", Toast.LENGTH_LONG).show();
}
2.3响应
// 3 : 响应请求权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
//权限被用户同意了,执行后面逻辑
Toast.makeText(MainActivity.this,"用户同意了这个权限",
Toast.LENGTH_LONG).show();
}
else
Toast.makeText(MainActivity.this,"用户否定了这个权限",
Toast.LENGTH_LONG).show();
break;
default:
}
}
更多推荐
已为社区贡献3条内容
所有评论(0)