#java #android #audio #android-mediaplayer
#java #Android #Аудио #android-медиаплеер
Вопрос:
Я реализовал простой MediaPlayer
механизм воспроизведения в своем приложении. Я не уверен, может ли это быть причиной проблемы, но все, казалось, работало хорошо до того момента, когда я обновил project до новейшего API (в настоящее время 19). Итак: воспроизведение из файла начинается нормально и внезапно останавливается, когда я нажимаю кнопку в своем приложении (что приводит к воспроизведению стандартного «звука щелчка»). Я установил OnCompletionListener
для своего медиаплеера, и он запускается после звука щелчка, с моим медиаплеером в качестве аргумента.
private void startNewTrack(int which){
stopTrack();
try {
if (mp == null) {
mp = new MediaPlayer();
//mp.setOnCompletionListener(this);
mp.setOnErrorListener(this);
}
MediaMetadataRetriever meta = new MediaMetadataRetriever();
meta.setDataSource(playlist[which].getPath());
String titleString = meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
if (titleString == null)
titleString = playlist[which].getName();
title.setText(titleString);
album.setText(meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
artist.setText(meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
try {
byte[] pic = meta.getEmbeddedPicture();
if (pic == null)
cover.setImageResource(R.drawable.albumart_mp_unknown);
else
cover.setImageBitmap(BitmapFactory.decodeByteArray(pic, 0, pic.length));
} catch (Exception e) {
cover.setImageResource(R.drawable.albumart_mp_unknown);
}
mp.setDataSource(playlist[which].getPath());
mp.prepare();
seek.setMax(mp.getDuration() / 1000);
mp.start();
while (playerThread != null)
Thread.sleep(5);
playerThread = new Thread(new Runnable() {
@Override
public void run(){
while (mp != null amp;amp; !isInErrorState) {
try {
if (!isSeeking amp;amp; mp.isPlaying()) {
final int pos = getCurrentPosition() / 1000;
MusicPlayback.this.post(new Runnable() {
@Override
public void run(){
seek.setProgress(pos);
}
});
}
Thread.sleep(500);
} catch (Exception e) {
}
}
}
});
playerThread.start();
play.setImageResource(R.drawable.pause);
} catch (Exception e) {
errorMessage();
}
}
Мой метод onCompletion вызывает release()
MediaPlayer
. Я временно прокомментировал это, но это ничего не изменило.
Итак, вопрос: почему мои MediaPlayer
остановки, когда другой звук завершает воспроизведение? Иногда даже зависает все приложение.
Комментарии:
1. Вы проверяете
MediaPlayer
аргумент для вашегоonCompletion
обратного вызова, чтобы убедиться, что он вашMediaPlayer
? Если нет, это то, что вы могли бы попробовать.2. ДА. Я уже делаю это, и я получаю свой собственный медиаплеер, когда звук щелчка завершается. Звук и музыка заканчиваются одновременно.