该权限在xml中声明
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
申请权限,主要用到如下4个函数
检查权限
int checkSelfPermission(String)
申请权限
void requestPermissions(int, String...)
是否应该显示请求权限的说明
boolean shouldShowRequestPermissionRationale(String)
处理权限结果回调
void onRequestPermissionsResult(int,String[],int[])
上述四个方法中,前三个方法在support-v4
的ActivityCompat
中都有,建议使用兼容库中的方法。最后一个方法是用户授权或者拒绝某个权限组时系统会回调Activity或者Fragment
中的方法。
checkSelfPermission
的返回值有如下两种
已拒绝
PackageManager.PERMISSION_DENIED
已授权
PackageManager.PERMISSION_GRANTED
动态权限申请
Android 6.0之上Android11以下申请权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {// 6.0
String[] perms = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE};
for (String p : perms) {
int ret = ContextCompat.checkSelfPermission(activity, p);
if (ret != PackageManager.PERMISSION_GRANTED) {
//TODO 跳转到权限页,请求权限
return;
}
}
}
Android11申请权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
//判断是否有管理外部存储的权限
if (!Environment.isExternalStorageManager()) {
//TODO 跳转到权限页,请求权限
}
}
跳转系统授权页面
跳转到“应用信息”页面,安卓默认只能跳转到 "应用信息"页面,但是国内手机厂商大多支持各自自定义的Intent,直接跳到应用程序权限页面
/**
* 当前应用详情页面(在该页面单击权限,进入的是权限组页面)
*/
public static void goAppDetailsSettings(Context context) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.fromParts("package", context.getPackageName(), null));
context.startActivity(intent);
}
版权属于:不冷
本文链接:https://www.buleng.xyz/archives/215/
转载时须注明出处及本声明