Android14请求动态申请存储权限
Android14和Android15存储权限有增加多了选择部分,还是全部。一个小小的存储权限真的被它玩出了花来。本来Android13就将存储权限进行了3个细分,是图片,音频还是视频文件。
步调一:AndroidManifest
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <!-- Android 13版本适配,细化存储权限 -->
- <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
- <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
- <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
- <!-- Android 14版本适配,部分允许还是全部允许-->
- <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
复制代码 步调二、引入Rxpermissions
你用其他请求库也行
- api 'com.jakewharton.rxbinding4:rxbinding:4.0.0'
- api 'com.github.tbruyelle:rxpermissions:0.12'
复制代码 步调三、定义请求方法
- // 联系:893151960
- void requestStoragePermission(Context mContext, PermissionListener permissionListener) {
- if (PermissionCheckUtil.checkPermissions(mContext, PermissionNewUtils.getImageMediaPermission(mContext))) {
- permissionListener.permission(true);
- } else {
- PermissionNewUtils.requestCombinedPermission((FragmentActivity) mContext, PermissionNewUtils.getImageMediaPermission(mContext), new Consumer<Permission>() {
- @Override
- public void accept(Permission it) throws Throwable {
- if (it.granted) {
- permissionListener.permission(true);
- } else {
- boolean partGranted = false;
- // 部分同意
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE && mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
- if (ContextCompat.checkSelfPermission(
- mContext,
- READ_MEDIA_VISUAL_USER_SELECTED
- ) == PackageManager.PERMISSION_GRANTED
- ) {
- permissionListener.permission(true);
- partGranted = true;
- }
- }
- if (!partGranted) {
- permissionListener.permission(false);
- if (it.shouldShowRequestPermissionRationale) {
- //禁止,不做操作
- Toast.makeText(context, "禁止了权限", Toast.LENGTH_SHORT).show();
- } else {
- Toast.makeText(context, "永久禁止了权限", Toast.LENGTH_SHORT).show();
- //永久禁止
- // DialogUtilsKT.okAndCancel(
- // mContext,
- // mContext.getString(alwaysContent),
- // mContext.getString(R.string.ok_go_setting),
- // title = mContext.getString(alwaysTitle)
- // ) {
- // PermissionNewUtils.startAppSetting(mContext)
- // }
- }
- }
- }
- }
- });
- }
- }
复制代码 项目demo结构图
有问题或者必要源码都可以私信我
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |