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
in 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" />
を宣言しています。