2012-02-11 45 views
1

我做了一个基本的电台播放器,这使得它玩低于和完美的作品除了setWakeMode方法的代码。当我将手机置于待机状态时,音频将播放长达2分钟,然后开始停止并开始播放。有任何想法吗?Android的MediaPlayer的激活锁定不工作

N.B. radioPlayer是MediaPlayer的一个实例。

public boolean startRadio() 
{ 
    try 
    { 
     String url = getString(R.string.radioURL); // Radio url. 
     radioPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     radioPlayer.setDataSource(url); 
     radioPlayer.prepare(); // might take long! (for buffering, etc) 

     radioPlayer.setWakeMode(this.getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); 
     radioPlayer.start(); 
     return true; 
    } 
    catch(Exception e) 
    { 
     showAlert(getString(R.string.error), getString(R.string.radioError)); 
     radioPlayer.release(); 
     radioPlayer = new MediaPlayer(); 
     return false; 
    } 
} 

更新:其他地方审查另一个线程后,我发现,这个问题似乎是唯一的HTC手机,其实,我的三星Galaxy Tab即使没有唤醒锁生存的。有任何想法吗?

回答

1

Android开发者谷歌+页面重贴[本

小提示:如果你想保持在屏幕上,而用户在您的应用程序(例如玩游戏或观看视频),最好方式做,这是其中之一:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON

http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean

http://developer.android.com/reference/android/media/MediaPlayer.html#setScreenOnWhilePlaying(boolean

不要使用http://developer.android.com/reference/android/os/PowerManager.WakeLock.html,除非你必须这样做,因为这需要你请求WAKE_LOCK权限(这样显示给用户一个更权限让他们不太可能安装您的应用程序)。同样使用以前的某个API可让系统为您管理唤醒锁,因此您不会在用户离开您的应用程序并且屏幕仍在保持开启状态时出现错误。

+0

事情是,我希望人们在听收音机用这个程序能够把自己的手机在待机和走动它装在口袋里,如果他们愿意的话,或者只是一般听而不在屏幕上运行了他们因此迫使屏幕继续工作并不是真正的选择。 已经添加了WAKE_LOCK权限。感谢您的贡献:) – apbarratt 2012-02-11 23:01:07

+0

如果您只想让mediaplayer继续游戏,keepScreenOn会将一个Rocketlauncher带到刀斗中。:) – REJH 2015-10-01 10:32:13

-1

集keepScreenOn =真

最容易的事情。

*上的一个视图,找到一个名为keepScreenOn属性,并将其设置* 如此。

就是这样。它的工作原理就像一个魅力:)

+3

如果你只想让mediaplayer继续玩,keepScreenOn会带来一个Rocketlauncher来对抗刀。 – REJH 2015-10-01 10:31:05

+0

@REJH你建议的替代解决方案是什么? keepScreenOn被建议的方式(由Android团队)相比,wakelocks保持屏幕上。 – 2015-10-02 08:45:23

+0

这个问题并没有说他想保持屏幕。他希望wifi保持清醒。 (见他的评论,他明确地这样说:“事情是,我希望人们用这个应用程序听收音机能够把他们的手机待机”)。一般来说,保持屏幕开启音乐播放是个不错的主意。如果这是一个视频流,我会同意你的解决方案。 – REJH 2015-10-02 09:42:05

5

你的MediaPlayer停止,因为无线上网的进入睡眠模式,所以你应该尝试使用WifiLock防止。

+0

哦哇我完全认为mediaplayer.setwakemode也将保持无线上网,但我忘了它并不需要它如果它不播放流 - 这可能发生很多。 – REJH 2015-10-01 10:35:31

-1

首先,您应该使用prepareAsync()而不是prepare(),因为缓冲可能需要一些时间,并且使用此方法,整个工作将在单独的线程中完成... 您还可以添加一些侦听器这肯定会有助于组织你的代码和方法;)。

+0

请仔细阅读该问题 – dragonfly 2015-11-24 07:56:17