2012-02-11 43 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