首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

关于安卓开发,在鸿蒙系统应用时,File读取文被拒绝访问的解决方案

  • 24-03-17 21:43
  • 2033
  • 10245
blog.csdn.net

        最近在开发一款简单的音乐播放器,中间要求从指定文件夹读取歌曲文件和歌词文件,按部就班地通过File从文件夹读取文件,先申请读写权限:

AndroidManifest.xml

  1. <uses-permission android:name="android.permission.BLUETOOTH" />
  2. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

 Activity

  1. private static final String[] PERMISSIONS = {
  2. "android.permission.READ_EXTERNAL_STORAGE",
  3. "android.permission.WRITE_EXTERNAL_STORAGE"};
  4. public static void verifyStoragePermissions(Activity activity) {
  5. int permission;
  6. try {
  7. //检测是否有写的权限
  8. for (String s : PERMISSIONS) {
  9. permission = ActivityCompat.checkSelfPermission(activity, s);
  10. if (permission != PackageManager.PERMISSION_GRANTED) {
  11. // 没有写的权限,去申请写的权限,会弹出对话框
  12. ActivityCompat.requestPermissions(activity, PERMISSIONS, REQUEST_EXTERNAL_STORAGE);
  13. }
  14. }
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. }
  18. }

然后获取文件:

  1. File[] subFile = file.listFiles();
  2. for (File value : subFile) {
  3. // 判断是否为文件夹
  4. if (!value.isDirectory()) {
  5. String filename = value.getName();
  6. // 判断是否为MP3结尾
  7. if (filename.trim().toLowerCase().endsWith(".mp3")) {
  8. ListItem data = new ListItem();
  9. String name=filename.split("\\.")[0];
  10. data.name=name;
  11. data.path = SYS_FILE_PATH + "/" + name;
  12. Buffer.add(data);
  13. }

        本来在虚拟机还是实机(Android 11)运行时都非常正常,但是就在联系客户测试的时候,客户告知我扫描音乐时闪退!经过了解得知用户使用的为华为手机(HarmonyOS 2.0),然后就开始了对崩溃原因的排查,最后锁定了file.listFiles()方法返回值为空

    File[] subFile = file.listFiles();

        此时subFile为null,所以读取出异常崩溃,于是我就输出了file的可读性file.canRead(),奇怪的事发生了,在Android 11运行时会返回ture(可读),而在HarmonyOS则会返回false(不可读),这个Bug一时间还真没想到原因,由于HarmonyOS资料少,兼容性问题资料更少,求助于互联网并不能找到有效地解决方案,只能自己寻找原因。

        首先想到了权限的问题,之前知道最新的SDK引入了一些新权限,所以去查了一下,结果就发现了ACCESS_MEDIA_LOCATION这个从媒体收藏中读取位置信息的权限,一想到自己是在读取的时候出的问题,果断加上,结果Bug依旧,在Android 11运行时会返回ture(可读),而在HarmonyOS则会返回false(不可读),依然在华为手机上闪退

         在尝试诸多办法无果后,最终无意间看到HarmonyOS 2.0大约相当于Android 10(不知有无根据),最终决定降一下targetSdkVersion,由30降至28时,Bug消失!

        总结:兼容性方面,HarmonyOS和Android还是有些许去别的,而且HarmonyOS与Android并没有官方的版本对应关系,个人认为(仅个人看法)HarmonyOS 2.0与Android10版本相似,在开发Android应用时,如果放到HarmonyOS设备上有Bug,不妨降低一下兼容SDK版本,说不定问题就解决了,因为Android自身SDK不兼容时都会出一些Bug,更何况和HarmonyOS不兼容时呢。

注:本文转载自blog.csdn.net的差两分的码农的文章"https://blog.csdn.net/weixin_43260537/article/details/124286899"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

135
HarmonyOS
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top