2016-04-06 136 views
0

我試圖從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 -ladb 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" /> 

回答

相關問題