Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaPlayer在屏幕关闭时冻结_Android_Android Mediaplayer_Freeze - Fatal编程技术网

Android MediaPlayer在屏幕关闭时冻结

Android MediaPlayer在屏幕关闭时冻结,android,android-mediaplayer,freeze,Android,Android Mediaplayer,Freeze,我已经编写了一个音乐播放器应用程序,使用MediaPlayer播放MP3文件。它在大多数情况下工作正常,但当我关闭手机屏幕时,prepare()方法可能会冻结,直到我打开屏幕。屏幕一打开,它就消失了 这是相当令人沮丧的,因为它并不总是发生,而是在屏幕关闭的情况下播放大约3首曲子后发生的。我没有任何例外 mMediaPlayer.reset(); LogDebugf( "MP3_PLAY::mMediaPlayer.setDataSource..\n" ); mMediaPlayer.setD

我已经编写了一个音乐播放器应用程序,使用MediaPlayer播放MP3文件。它在大多数情况下工作正常,但当我关闭手机屏幕时,prepare()方法可能会冻结,直到我打开屏幕。屏幕一打开,它就消失了

这是相当令人沮丧的,因为它并不总是发生,而是在屏幕关闭的情况下播放大约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”,然后是“prepare”,直到我在大约30秒后打开屏幕时才进行处理


更新:我甚至尝试过prepareAsync(),它也有同样的问题。这是在三星Galaxy S4上。如果我不能可靠地工作,我可以尝试使用ExoPlayer。

我相信下面缺少的一行解决了我的问题:

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才能工作。它甚至不会在选择项目时发出嘟嘟声,直到它完全醒来