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

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

        }
    }

相关文章:

  • dify+deepseek联网搜索:免费开源搜索引擎Searxng使用(让你的大模型也拥有联网的功能)
  • Elasticsearch8.17 生产集群使用优化
  • 【AIGC】Win10系统极速部署Docker+Ragflow+Dify
  • SAP-ABAP:AP屏幕增强技术手册-详解
  • 5.2 Alpha to coverage in Depth
  • 在Ubuntu上安装MEAN Stack的4个步骤
  • go面向对象编程三大特性,封装、继承和多态
  • leetcode98-验证二叉搜索树
  • 【2025】基于Springboot + vue实现的毕业设计选题系统
  • Transaction rolled back because it has been marked as rollback-only问题解决
  • windows克隆项目找不到,修改git bash中存储的账号密码
  • 如何查看安卓版本号的方法(例如查看是13、12、11、10...)
  • 齿轮热处理学习笔记分享
  • 【MySQL】基本查询(表的增删查改+聚合函数)
  • MySQL 进阶学习文档
  • 工作记录 2017-02-08
  • 区块链交易签名相关知识总结
  • 经典面试题:C/C++中static关键字的三大核心作用与实战应用
  • 详解过程内聚、时间内聚、顺序内聚、逻辑内聚
  • OpenCV旋转估计(1)用于估计图像间仿射变换关系的类cv::detail::AffineBasedEstimator
  • 中国证券监督管理委员会党委委员、副主席王建军接受审查调查
  • 澎湃回声丨23岁小伙“被精神病8年”续:今日将被移出“重精”管理系统
  • 辽宁省委书记郝鹏、省长王新伟赶到辽阳火灾事故现场指导善后处置工作
  • “上报集团文化助力区域高质量发展赋能平台”揭牌
  • 找化学的答案,解人类的命题:巴斯夫的“变革者”成长之道
  • 跨海论汉|专访白馥兰:对中国农业史的兴趣,从翻译《齐民要术》开始