我試圖從Environment.getExternalStorageDirectory()
將文件加載到SoundPool
。該文件存在,但我仍然得到無法從仿真器上的外部存儲讀取文件
E/SoundPool: error loading /storage/emulated/0/dialpad/sounds/mamacita_us/one.mp3
當我嘗試加載它。在真正的設備上,它完美地運行,從完全相同的路徑。
這是我使用加載文件的代碼:
if(isExternalStorageReadable()){
String externalStorageAbsolutePath = Environment.getExternalStorageDirectory().getAbsolutePath();
String soundFilesPath = (new File(externalStorageAbsolutePath, "dialpad/sounds/mamacita_us")).getPath();
Log.d("DEBUG", (new File(soundFilesPath, "one.mp3")).getAbsolutePath());
Log.d("DEBUG", (new File(soundFilesPath, "one.mp3")).exists() ? "EXISTS" : "DOES NOT EXSIST");
sounds.put("1", soundPool.load((new File(soundFilesPath, "one.mp3")).getAbsolutePath(), 1));
sounds.put("2", soundPool.load((new File(soundFilesPath, "two.mp3")).getPath(), 1));
}
isExternalStorageReadable()
是一個輔助方法:
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
的logcat的輸出說
D/DEBUG: /storage/emulated/0/dialpad/sounds/mamacita_us/one.mp3
D/DEBUG: EXISTS
我一個想法,也許這是一個文件許可問題,但我不知道... ls -l
在adb shell
給我
-rw-rw---- root sdcard_rw 18288 2009-07-06 13:42 one.mp3
-rw-rw---- root sdcard_rw 21422 2009-07-06 13:44 two.mp3
是否嘗試過使用chmod
更改權限,但他們永遠不會改變。我用adb push
將文件推送到模擬器。
任何人有任何想法如何解決這個問題?正如我所說的,它在同一條路徑上的真實設備上運行良好,因此似乎是Genymotion仿真器和/或文件系統的問題。模擬器運行Android 6.0(API23)。
哦,是的,我在我的艙單申報
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
。