У меня есть проигрыватель Media Player в фоновом режиме. Файлы MP3 устанавливаются на TCP-сервере с сервера на моем рабочем столе. При отладке приложения песни отправляются и принимаются. Селекция песен структурирована в трех действиях. Активность в списке альбомов (просмотр списка) приведет вас к активности списка композиций (списка). вы выбираете песни, выбирая флажок и нажав кнопку воспроизведения. Кнопка воспроизведения привязывается к сервису, и песня запрашивается по tcp. Все песни добавляются в память телефона. Вот метод, который получает байт [] SETN над TCP (форма Thisis в myMediaPlayer класса:Android Media Player на слушателе завершения не работает должным образом
public void AddSong(byte[] toParse, String songName)
{
File cacheDir = new File(android.os.Environment.getExternalStorageDirectory(),"MusicStreamCache");
if(!cacheDir.exists())
cacheDir.mkdirs();
File temp = new File(cacheDir, songName);
FileOutputStream fos;
try {
fos = new FileOutputStream(temp);
fos.write(toParse);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
songs.add(temp);
if(!mediaPlayer.isPlaying() && !isPaused)
{
MediaPlay();
}
}
public void AddSong(File filein)
{
filein.deleteOnExit();
songs.add(filein);
if(!mediaPlayer.isPlaying() && !isPaused && CurrentSong == 0)
{
MediaPlay();
}
}
public void MediaPlay()
{
if(!mediaPlayer.isPlaying() && CurrentSong <= songs.size())
{
mediaPlayer.reset();
try{
@SuppressWarnings("resource")
FileInputStream fis = new FileInputStream(songs.get(CurrentSong));
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.prepare();
int length = mediaPlayer.getDuration();
mediaPlayer.start();
if(CurrentSong <= songs.size())
{
CurrentSong ++;
}
}
catch(Exception err)
{
@SuppressWarnings("unused")
String error = err.getMessage();
}
mediaPlayer.setOnCompletionListener(completionListener);
}
}
OnCompletionListener completionListener = new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
if(CurrentSong <= songs.size())
{
MediaPlay();
}
}
};
Когда телефон подключен на рабочий стол, и я отладки приложения все работает как я могу добавить. одна песня из альбома, и она будет загружаться и воспроизводиться. Я могу добавить несколько песен из альбома (или всех песен), и они будут загружаться и воспроизводиться один за другим. Я могу выбирать песни из нескольких разных альбомов, и все они будут загружать один после второго и воспроизведения в последовательности, то есть слушатель по завершению работает как ожидалось.
Проблема возникает, когда я выбираю запустить приложение из Eclipse (без отладки), а затем отсоединяться от рабочего стола (чтобы проверить когда сигнал Wi-Fi слабый или в разных местах вокруг дома). Если я выберу песню, она загрузится и сыграет нормально. Однако, если я выбираю более одной песни, первая песня играет хорошо, но дальнейшие песни не будут воспроизводиться. Они загружаются, как если бы я выбирал новую песню, когда первая песня перестала воспроизводить следующую песню в списке при воспроизведении загруженных песен, а только что выбранная песня загружалась, но не воспроизводится. Я не могу понять, почему это происходит?
Поскольку у меня нет таких проблем, когда я отлаживаю. Мне интересно, не работает ли мой сервис, когда он не подключен к рабочему столу? Или я пропущу что-то очевидное? Я добавил частичный замок слежения к моему медиаплееру, но его, похоже, не облегчает проблему? Любые советы были бы оценены :-)
Вы перезагружаете медиаплеер, когда песня останавливается? – Codeman
Я возвращаюсь в приемник завершения завершения, который работает при отладке, но не при запуске – Luthervd