关于安卓开发,在鸿蒙系统应用时,File读取文被拒绝访问的解决方案
????????最近在開發一款簡單的音樂播放器,中間要求從指定文件夾讀取歌曲文件和歌詞文件,按部就班地通過File從文件夾讀取文件,先申請讀寫權限:
AndroidManifest.xml
<uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />?Activity
private static final String[] PERMISSIONS = {"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE"};public static void verifyStoragePermissions(Activity activity) {int permission;try {//檢測是否有寫的權限for (String s : PERMISSIONS) {permission = ActivityCompat.checkSelfPermission(activity, s);if (permission != PackageManager.PERMISSION_GRANTED) {// 沒有寫的權限,去申請寫的權限,會彈出對話框ActivityCompat.requestPermissions(activity, PERMISSIONS, REQUEST_EXTERNAL_STORAGE);}}} catch (Exception e) {e.printStackTrace();}}然后獲取文件:
File[] subFile = file.listFiles();for (File value : subFile) {// 判斷是否為文件夾if (!value.isDirectory()) {String filename = value.getName();// 判斷是否為MP3結尾if (filename.trim().toLowerCase().endsWith(".mp3")) {ListItem data = new ListItem();String name=filename.split("\\.")[0];data.name=name;data.path = SYS_FILE_PATH + "/" + name;Buffer.add(data);}????????本來在虛擬機還是實機(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不兼容時呢。
總結
以上是生活随笔為你收集整理的关于安卓开发,在鸿蒙系统应用时,File读取文被拒绝访问的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 外置 SD 卡写入权限问
- 下一篇: 万彩办公大师OfficeBox3.1.0