Воспроизведение музыки в режиме сна / ожидания в Android 2.3.3

Я пытаюсь разработать простой медиаплеер для воспроизведения mp3-файлов из каталога sdcard/music для Android 2.3.3. Проблема в том, что когда я нажимаю кнопку питания или когда устройство переходит в спящий режим, музыка останавливается. В результате поиска в Google и поиска в стеке, я обнаружил, что мне нужно использовать параметры блокировки пробуждения, но что бы я ни делал, музыка останавливается, когда устройство переходит в спящий режим (нажатие клавиши F7 на эмуляторе также останавливает музыку). Поскольку я боролся с этим слишком долго, я подумал, что буду просить о помощи. Я был бы искренне признателен за любой вклад. Благодарю. Вот мой код:

FileInputStream fis = new FileInputStream(songList.get(0));
FileDescriptor fd = fis.getFD();
if (mediaPlayer != null) {
 if (mediaPlayer.isPlaying()) {
  mediaPlayer.release();
  mediaPlayer = null;
 }
}

mediaPlayer = new MediaPlayer();
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mediaPlayer.setDataSource(fd);
mediaPlayer.prepare();
playPauseButton.setImageResource(android.R.drawable.ic_media_pause);
mediaPlayer.seekTo(songPosition);
mediaPlayer.start();
appMsg.setText(songList.get(0));

1 ответ

Решение

Я думаю, что вы должны запускать мультимедиа в фоновом режиме с помощью сервисов. Итак, вы создаете сервис, вставляете в него медиакод и прикрепляете его к кнопкам запуска и остановки, что-то вроде этого:

public class MediaPlayerService extends Service {
     MediaPlayer myMediaPlayer;

     @Override
     public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
     }
     @Override
     public void onCreate() {
         FileInputStream fis = new FileInputStream(songList.get(0));
         FileDescriptor fd = fis.getFD();

         if (mediaPlayer != null) {
           if (mediaPlayer.isPlaying()) {
               mediaPlayer.release();
               mediaPlayer = null;
              }
            }

         mediaPlayer = new MediaPlayer();
         mediaPlayer.setDataSource(fd);
         mediaPlayer.prepare();
         playPauseButton.setImageResource(android.R.drawable.ic_media_pause);
         mediaPlayer.seekTo(songPosition);
         appMsg.setText(songList.get(0));
     }
     @Override
     public void onStart(Intent intent, int startid) {
         myMediaPlayer.start();
     }
     @Override
     public void onDestroy() {
         myMediaPlayer.stop();
     }
}

После этого вы запускаете эту службу, когда кнопка запуска нажата с помощью методаstartService и прекратить это с помощью метода stopService в вашем классе деятельности

Другие вопросы по тегам