mPaaS uniapp安卓端,读写手机存储权限被关闭,这个要怎么处理呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在 mPaaS uniapp 安卓端中,如果读写手机存储权限被关闭,您需要引导用户重新授予权限,并确保在代码中正确处理动态权限申请逻辑。以下是详细的解决步骤:
在 Android 6.0 及以上版本中,权限需要动态申请。首先,您需要检查应用是否已经获得 READ_EXTERNAL_STORAGE
和 WRITE_EXTERNAL_STORAGE
权限。
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// 权限未授予,需要申请
}
如果权限未授予,您需要通过 ActivityCompat.requestPermissions
方法动态申请权限。
ActivityCompat.requestPermissions(activity,
new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
},
REQUEST_CODE_STORAGE_PERMISSION);
onRequestPermissionsResult
回调中处理用户的授权结果:@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CODE_STORAGE_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户已授予权限
} else {
// 用户拒绝了权限,提示用户权限的重要性
}
}
}
如果您的应用目标 SDK 版本为 33(即 targetSdkVersion 33
),需要适配 Android 13 的细化媒体权限。READ_EXTERNAL_STORAGE
权限已被拆分为以下三个权限: - READ_MEDIA_IMAGES
- READ_MEDIA_VIDEO
- READ_MEDIA_AUDIO
根据业务需求,在 AndroidManifest.xml
中添加相应的权限声明:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
同时,修改代码中的动态权限申请逻辑,改为申请上述细化权限:
ActivityCompat.requestPermissions(activity,
new String[]{
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.READ_MEDIA_AUDIO
},
REQUEST_CODE_MEDIA_PERMISSION);
如果用户拒绝了权限申请,您可以引导用户前往应用设置页面手动开启权限。以下是一个跳转到应用设置页面的示例代码:
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
通过以上步骤,您可以有效处理 mPaaS uniapp 安卓端读写手机存储权限被关闭的问题,并确保应用在不同 Android 版本上的正常运行。