2016-03-08 171 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會工作。選擇物品直至完全醒來時,它甚至不會發出蜂鳴聲。