MediaPlayer готовит ошибку: status=0x1
Я работал над получением списка музыкальных файлов с SDCard, и я преуспел в этом, но проблема в том, что, когда я нажимаю на файл, он должен воспроизвести этот файл, но он выдает мне эту ошибку. Вот мой код:
private String[] mMusicList;
static long playlistid=0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMediaPlayer = new MediaPlayer();
ListView mListView = (ListView) findViewById(R.id.phonemusiclist);
mMusicList = getMusic();
ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mMusicList);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
try {
playSong(mMusicList[arg2]);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
private String[] getMusic() {
final Cursor mCursor = managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Audio.Media.DISPLAY_NAME }, null, null,
"LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC");
int count = mCursor.getCount();
String[] songs = new String[count];
int i = 0;
if (mCursor.moveToFirst()) {
do {
songs[i] = mCursor.getString(0);
i++;
} while (mCursor.moveToNext());
}
mCursor.close();
return songs;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private void playSong(String path) throws IllegalArgumentException,IllegalStateException, IOException {
String extStorageDirectory = Environment.getExternalStorageDirectory()
.toString();
path = extStorageDirectory + File.separator + path;
mMediaPlayer.reset();
FileInputStream fis = new FileInputStream(path);
mMediaPlayer.setDataSource(fis.getFD());
mMediaPlayer.prepare();
mMediaPlayer.start();
}
1 ответ
Хорошо, прежде всего удалить mCursor.close()
, Здесь вы закрываете курсор, который является проблемой в большинстве случаев.
Во-вторых, очевидная ошибка - путь, который вы указываете mediaplayer
, Вы даете путь с separator
,
path = extStorageDirectory + File.separator + path;
FileInputStream fis = new FileInputStream(path);
mMediaPlayer.setDataSource(fis.getFD());
что не так и файл не будет найден.
Вместо этого измените код на
mMediaPlayer.setDataSource(extStorageDirectory);
Надеюсь, ты понял. Не унывайте.:)