2016-03-08 3 views
0

Я написал приложение для музыкального плеера, которое использует MediaPlayer для воспроизведения MP3-файлов. Он отлично работает в большинстве случаев, но когда я выключаю экран на своем телефоне, метод prepare() может замерзнуть, пока я не включу экран. Как только экран включается, он исчезает.Android MediaPlayer Замораживает, когда экран выключен

Это довольно неприятно, потому что это не всегда происходит, но происходит после воспроизведения примерно 3 мелодий при выключенном экране. У меня нет никаких исключений.

mMediaPlayer.reset(); 

LogDebugf( "MP3_PLAY::mMediaPlayer.setDataSource..\n"); 
mMediaPlayer.setDataSource(mMP3Path); 

LogDebugf( "MP3_PLAY::mMediaPlayer.prepare..\n"); 
mMediaPlayer.prepare(); 

// Can freeze for long times or until screen turned on in above call 
LogDebugf( "MP3_PLAY::mMediaPlayer.start..\n"); 
mMediaPlayer.start(); 

Моя текущая Logcat показана ниже:

03-09 08:04:07.333 I/System.out(8186): MP3_PLAY::mMediaPlayer.prepare.. 
03-09 08:04:07.333 V/MediaPlayer(8186): setVideoSurfaceTexture 
// Notice the huge delay here until I switch the screen on 
03-09 08:04:31.049 V/MediaPlayer(8186): prepare 
03-09 08:04:31.059 V/MediaPlayer(8186): message received msg=200, ext1=973, ext2=0 
03-09 08:04:31.059 W/MediaPlayer(8186): info/warning (973, 0) 
03-09 08:04:31.059 V/MediaPlayer(8186): callback application 
03-09 08:04:31.059 V/MediaPlayer(8186): back from callback 
03-09 08:04:31.059 V/MediaPlayer(8186): message received msg=5, ext1=0, ext2=0 
03-09 08:04:31.059 V/MediaPlayer(8186): New video size 0 x 0 
03-09 08:04:31.059 V/MediaPlayer(8186): callback application 
03-09 08:04:31.059 V/MediaPlayer(8186): back from callback 
03-09 08:04:31.059 V/MediaPlayer(8186): message received msg=1, ext1=0, ext2=0 
03-09 08:04:31.059 V/MediaPlayer(8186): prepared 
03-09 08:04:31.059 V/MediaPlayer(8186): signal application thread 
03-09 08:04:31.059 V/MediaPlayer(8186): callback application 
03-09 08:04:31.059 V/MediaPlayer(8186): prepare complete - status=0 
03-09 08:04:31.059 V/MediaPlayer(8186): back from callback 
03-09 08:04:31.059 I/System.out(8186): MP3_PLAY::mMediaPlayer.start.. 

Последней строка, которая появляется перед стоп-кадром «setVideoSurfaceTexture», а затем «готовить» не обрабатывается, пока я не повернуть экран на ~ 30 секунд спустя.

UPDATE: Я даже попробовал prepareAsync(), и у него такая же проблема. Это на Samsung Galaxy S4. Вместо этого я могу попросить ExoPlayer попробовать, если я не получу эту работу надежно.

ответ

0

Я считаю, что недостающая линия ниже решить мою проблему:

mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); 

НО ..

еще хуже, после перезагрузки моего телефона, я не могу играть любую музыку вообще с выше изменениями!

Теперь я получаю:

03-10 18:29:09.857 V/MediaPlayer(2119): message received msg=100, ext1=1, ext2=-2147483648 
03-10 18:29:09.857 E/MediaPlayer(2119): error (1, -2147483648) 
03-10 18:29:09.857 V/MediaPlayer(2119): callback application 
03-10 18:29:09.857 V/MediaPlayer(2119): back from callback 
03-10 18:29:09.877 I/MediaPlayer(2119): send context aware event 
03-10 18:29:09.877 I/MediaPlayer(2119): sendBroadcast CONTEXT_AWARE_MUSIC_INFO - type(error) - id (4) 
03-10 18:29:09.877 E/MediaPlayer(2119): Error (1,-2147483648) 
03-10 18:29:09.877 I/System.out(2119): OnErrorListener::MP3 ERROR 1 -2147483648 

Казалось бы, что мне нужно ждать, пока мой телефон будет готов до того, как MediaPlayer будет работать. Он даже не выдавал бы сигнал при выборе предметов, пока он не проснулся полностью.