0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android 11的外部存储权限申请流程分享

jf_78858299 来源:口袋里的安卓 作者:口袋里的安卓 2023-05-26 11:29 次阅读

Android 11对应的API为30,从这个版本起要想对外部存储进行写入操作的话需要比以往的操作多几个步骤,这里简单归纳下,具体的原因我就不多话了,具体步骤如下以供参考

1-在AndroidManifest.xml里这样注册权限:

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

比以往多一条MANAGE_EXTERNAL_STORAGE

2-在AndroidManifest.xml的application下加入android:requestLegacyExternalStorage="true"

其实这句在API30下已经不起作用了,但在API29中还有作用,所以一并加上以免麻烦。

3-在代码中申请权限,由于这些新加的权限特殊,以往的申请方式不起作用,无论怎么申请,最后必然是授权失败。所以正确的方式就是先判断API的版本,如果大于等于30则用Environment.isExternalStorageManager()判断是否有授权,这个方法会返回一个布尔值,如是false就跳到一个特殊的页面让用户手动授权,跳转方法如下:

val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
intent.data = Uri.parse("package:" + requireActivity().packageName)
startActivity(intent) //startActivityForResult(intent,0x01)

由于这个授权界面是一个Activity,所以用startActivity还是startActivityForResult都可以,具体看你怎么利用生命周期了。

图片

4-记得用传统方式申请下WRITE_EXTERNAL_STORAGE,以免产生不必要的麻烦。

到此,针对Android 11的外部存储的权限申请就这样了。最后说一下,虽然通过上述方式可以对整个外部存储空间进行文件的读写操作,但Android/data目录是个例外,此目录下保存着所有应用的专属空间,在Android11下已经不让访问了,但可以通过代码方式直接访问自己的那个目录。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3936

    浏览量

    127397
  • 存储
    +关注

    关注

    13

    文章

    4314

    浏览量

    85839
  • API
    API
    +关注

    关注

    2

    文章

    1500

    浏览量

    62008
收藏 人收藏

    评论

    相关推荐

    鸿蒙原生应用元服务-访问控制(权限)开发工作流程相关

    一、权限的工作流程 权限申请使用的工作流程 应用在访问数据或者执行操作时,需要评估该行为是否需要应用具备相关的
    发表于 04-19 15:27

    [8.1.2]--7.1.4重难点动画讲解-Android的运行权限申请流程

    Android
    jf_60701476
    发布于 :2022年12月03日 00:55:52

    Android中数据存储的介绍和使用

    APP 在外部存储上的目录,其目录为 Android/data//。在访问该目录时, app 不需要申请读写存储
    发表于 09-19 09:05

    HarmonyOS开发权限申请的方法

    所需要的权限。使用ohos.app.Context.verifySelfmission接口查询应用是否已被授予该权限。(1).如果已被授权,可以结束授权申请流程。(2)如果希望授权,继
    发表于 05-19 14:16

    Android 11中OTA工具读写的文件夹不具有访问权限,不能升级是为什么?

    Android 11中,OTA工具读写的文件夹不具有访问权限,不能升级。请问有把OTA文件放在能访问的文件夹下的版本吗?还没到APP开发阶段,只能求助原厂。
    发表于 08-15 06:21

    请问是否有关于Android11平台默认开放root权限的文档?

    请问是否有关于Android11 平台默认开放root权限的文档,我们需要用u盘手机替换ko文件
    发表于 04-17 08:21

    Android系统权限提升攻击检测技术_王聪

    Android系统权限提升攻击检测技术_王聪
    发表于 03-19 11:41 0次下载

    如何使用权限Android进行应用风险评估方法的资料说明

    针对Android权限机制存在的问题以及传统的应用风险等级评估方法的不足,提出了一种基于权限Android应用风险评估方法。首先,通过对应用程序进行逆向工程分析,提取出应用程序声明的
    发表于 03-28 16:49 4次下载
    如何使用<b class='flag-5'>权限</b>的<b class='flag-5'>Android</b>进行应用风险评估方法的资料说明

    如何使用Android权限实现应用风险评估详细方法说明

    针对Android权限机制存在的问题以及传统的应用风险等级评估方法的不足,提出了一种基于权限Android应用风险评估方法。首先,通过对应用程序进行逆向工程分析,提取出应用程序声明的
    发表于 10-25 16:57 4次下载
    如何使用<b class='flag-5'>Android</b>的<b class='flag-5'>权限</b>实现应用风险评估详细方法说明

    基于权限Android应用风险评估方法

    针对Android权限机制存在的问题以及传统的应用风险等级评估方法的不足,提出了一种基于权限Android应用风险评估方法。首先,通过对应用程序进行逆向工程分析,提取出应用程序声明的
    发表于 07-17 15:55 11次下载
    基于<b class='flag-5'>权限</b>的<b class='flag-5'>Android</b>应用风险评估方法

    鸿蒙APP开发鸿蒙权限请求框架

    关于 HarmonyOS 的动态授权的常规操作流程和代码我之前写过一篇文章:《鸿蒙动态权限申请完整规范流程和操作详解》。 文章地址如下: https://harmonyos.51cto
    的头像 发表于 09-28 09:19 2968次阅读

    外部存储和内部存储的区别

    Android中根据数据是否为应用私有、是否需要给外部应用暴露以及数据的大小可以有以下几种选择: * Shared Preferences * 内部存储 * 外部
    的头像 发表于 05-26 11:30 1732次阅读
    <b class='flag-5'>外部</b><b class='flag-5'>存储</b>和内部<b class='flag-5'>存储</b>的区别

    SD卡外部存储使用方法

    Android`设备支持外部存储,比如`SD`卡等,保存在外部存储的数据具有全局可读性,可供在其他设备比如电脑上阅读,修改等。使用
    的头像 发表于 05-26 11:32 1077次阅读
    SD卡<b class='flag-5'>外部</b><b class='flag-5'>存储</b>使用方法

    Purple Pi OH Android11 ROOT方法

    为了让应用程序可以直接调用su执行系统命令和获取root权限,本文基于Purple Pi OH主板的Android SDK,介绍如果修改和编译一个root版本的Android11系统,以下为sdk源码修改方法。
    的头像 发表于 06-25 09:49 842次阅读
    Purple Pi OH <b class='flag-5'>Android11</b> ROOT方法

    Purple Pi OH Android11 ROOT方法

    为了让应用程序可以直接调用su执行系统命令和获取root权限,本文基于Purple Pi OH主板的Android SDK,介绍如果修改和编译一个root版本的Android11系统,以下为sdk源码修改方法。
    的头像 发表于 06-30 14:59 662次阅读
    Purple Pi OH <b class='flag-5'>Android11</b> ROOT方法