Android 11(SDK_INT >= 30)后,外部存储权限android.permission.MANAGE_EXTERNAL_STORAGE

从Android 11(SDK_INT >= 30)开始,app如果读写外部存储器须申请权限android.permission.MANAGE_EXTERNAL_STORAGE

原先的:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

搭配在AndroidManifest.xml的application里面配置:

android:requestLegacyExternalStorage="true"

已失效。

新的解决方案:

首先在AndroidManifest.xml里面申请权限:

    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />

然后在上层Java代码的运行时判断,如果没有获得完全的外部存储器读写权限,则运行时申请:

if (Build.VERSION.SDK_INT >= 30) {
            if (!Environment.isExternalStorageManager()) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
                startActivity(intent);
                return;
            }
        }

/**
开始接着正常的写读写文件操作...
*
/

``` private void requestNotificationPermission() { boolean notificationPermissionGranted = NotificationManagerCompat.from(this).areNotificationsEnabled(); if (!notificationPermissionGranted){ Intent intent = new Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); startActivity(intent); } } private void checkAndRequestStoragePermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (!Environment.isExternalStorageManager()) { Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); startActivityForResult(intent, REQUEST_MANAGE_EXTERNAL_STORAGE); } else { havePermission = true; } } else { if (ActivityCompat.checkSelfPermission(this,WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE); }else { havePermission = true; } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); if (resultCode == REQUEST_MANAGE_EXTERNAL_STORAGE){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R){ havePermission = Environment.isExternalStorageManager(); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){ super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_EXTERNAL_STORAGE){ havePermission = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED; } }```检查代码并修改 改用adnoird14适用的方法。
最新发布
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangphil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值