2016-03-08 125 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中的最后一行几秒钟后。

更新:我甚至尝试prepareAsync(),它有同样的问题。这是在三星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会工作。选择物品直至完全醒来时,它甚至不会发出蜂鸣声。