当前位置: 首页 > article >正文

关于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();
                }
            }

        }
    }

http://www.kler.cn/a/592128.html

相关文章:

  • 【Linux系统】Linux进程终止的N种方式
  • LeetCode 72 —— 72.编辑距离
  • 生成式AI红队测试:如何有效评估大语言模型
  • Javascript引用数据类型详解
  • 深入解析 `SQL_SMALL_RESULT`:MySQL 的“小优化”大作用
  • Nginx 结合 NFS 共享的服务搭建、DNS 域名解析及安全加固(时间同步、防火墙)实验
  • 设计C语言的单片机接口
  • 【Golang】第五弹----函数
  • 关于解决新版本spring项目请求测试接口返回406的问题
  • 前端面试项目拷打
  • Feture常见实现类(FutureTask、CompletableFuture、ListenableFuture)对比
  • 从零开始构建一个简单的Web爬虫:Python实战教程
  • 基于Gradio实现的增删改查(CRUD)模板系统设计方案
  • 爬虫逆向:详细讲述iOS底层原理及机制
  • 智慧环保系统(源码+文档+讲解+演示)
  • 【Camera2 教程六】Camera2算法集成
  • Channel-wise Knowledge Distillation for Dense Prediction论文阅读和
  • 【GPT入门】第20课 langchain的function calling 初步体验
  • 4.3--入门知识扫盲,IPv4的头部报文解析,数据报分片,地址分类(包你看一遍全部记住)
  • 它,让机器人与HMI屏无缝对接