【FAQ】从存储权限看HarmonyOS 3.0中应用适配

问题背景:

HarmonyOS 3.0发布了,之前开发的Android的应用,发现系统选项中存储权限部分有变化,如下图:

"存储"权限变为"媒体和文件",且只能访问"仅媒体"的文件目录。因为项目需要读取本地导入存储文件,"仅媒体"权限无法满足当前项目需求。

初步分析:

控制变量排查问题根源,而在另一台2.0.0的手机并没有发生此问题。如下图中"存储访问权限"开启则可以获取所有外部文件,因而怀疑与3.0系统权限控制有关。

真正的原因:

查阅资料后发现,"仅媒体"权限是Android 11中新增的"媒体文件访问权限" (Android 11 中的存储机制更新 | Android 开发者 | Android Developers),因此判断HarmonyOS 3.0适配的是Android 11以上版本。因此需要做相应的适配,查阅官方文档针对Android 11上访问所有文件,有一个新的权限MANAGE_EXTERNAL_STORAGE(管理存储设备上的所有文件 | Android 开发者 | Android Developers

具体步骤如下:

1、在Manifest中声明权限:

javascript 复制代码
   <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

声明这个权限后,我们在系统权限管理中就可以找到访问所有文件的权限入口,如下图:

2、判断是否获取到MANAGE_EXTERNAL_STORAGE权限:

javascript 复制代码
    //判断是否获取MANAGE_EXTERNAL_STORAGE权限:
    Boolean isHasStoragePermission= Environment.isExternalStorageManager()

3、使用系统intent跳转至权限界面,打开所有文件访问权限:

javascript 复制代码
    Intent intent = Intent();
    intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
    startActivity(intent);

总结与思考:

HarmonyOS 3.0较2.0相比,适配的Android SDK版本不同,需要大家在Android开发的时候注意版本适配。目前我研究发现3.0.0是适配Android S版本,2.0.0适配的是Android Q版本,大家有兴趣的可以自己研究,欢迎交流。

欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

相关推荐
2603_965148113 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
知无不研6 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
cfm_29146 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
C++ 老炮儿的技术栈8 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_448011168 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
小白学大数据8 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
zlinear数据采集卡8 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Poo_Chai9 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库
瑞码空间9 小时前
Java 图形界面(GUI)完整知识点手册
java·开发语言·图形界面·swing
小努蛋9 小时前
linux编译openresty异常问题,lua_cjson.c:706:5: 错误: ‘for‘ 循环初始化声明只在 C99 或 C++ 模式下允许
开发语言·lua·openresty