关于android开发中,sd卡的读写权限的处理步骤和踩坑

1版本说明
在 Android 10(API 级别 29)及以下版本中,申请权限可以使用WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 权限请求文件存储权限。但从 Android 11(API 级别 30)开始,Google引入了一种新的管理存储权限机制,用于处理所有文件访问。对于这种情况,你需要使用 MANAGE_EXTERNAL_STORAGE 权限。
以下是如何在 AndroidManifest.xml 中设置当前私有方法 requestPermission 所涉及的权限:

AndroidManifest.xml 配置

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <!-- 其他元素,例如 application 及其下属元素 -->
     <uses-permission android:name="android.permission.CAMERA" />

    <!-- Android 11 (API 级别 30)及以上版本访问所有文件的权限 -->
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

    <!-- 在安卓系统中请求写入和读取外部存储的权限(针对 Android 10 及以下版本) -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

</manifest>

同时,也需要在代码中动态申请权限。比如在Activity中。代码如下:

 private void requestPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {//30
            if (!Environment.isExternalStorageManager()) {
                //跳转到设置界面引导用户打开
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, PERMISSIONS_REQUEST_CODE);
            }
        }
    }
   @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PERMISSIONS_REQUEST_CODE) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                if (Environment.isExternalStorageManager()) {
                    Log.d(TAG, "onActivityResult: permission success");
                } else {
                    Toast.makeText(this, "存储权限获取失败", Toast.LENGTH_SHORT).show();
                }
            }

        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值