ユーザーの音楽を再生する Android アプリケーションを作成しています。エミュレーターでは正常に動作するようになりましたが、電話にインストールすると動作しません。次の行でクラッシュします。
int songIndex = new Random().nextInt(songsList.size());
songList.size() が 0 を返しているため、電話で実行すると音楽が見つからないようです。マイクロ SD カードを携帯電話に挿入し、音楽をロードしました (ルート フォルダー内)。パスを取得するために次を使用しています。
final String MEDIA_PATH = Environment.getExternalStorageDirectory().getAbsolutePath();
エミュレーターと電話の両方で、これから返される文字列は /mnt/sdcard です。しかし、それはエミュレータでのみ機能しています。また、マニフェスト ファイルに次のアクセス許可を含めました。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
何か案は?
編集:
これはあまり役に立たないと思ったので含めませんでしたが、実際に songList を取得するために使用しているコードは次のとおりです。
public ArrayList<HashMap<String, String>> getPlaylist(){
File home = new File(MEDIA_PATH);
if(home.listFiles(new FileExtensionFilter()).length > 0) {
for(File file : home.listFiles(new FileExtensionFilter())){
HashMap<String, String> song = new HashMap<String, String>();
song.put("songTitle", file.getName().substring(0, (file.getName().length() -4)));
song.put("songPath", file.getPath());
//Add song to song list
songsList.add(song);
}
}
return songsList;
}