2013-08-30 100 views
1

我有應用程序正在播放電視流,並且需要始終打開。 我做收購的OnCreate)喚醒鎖(Android電源管理器喚醒鎖

pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, TAG); 
wl.acquire(); 

,然後釋放的onDestroy()

if (wl != null) { 
    wl.release(); 
    wl = null; 
} 

用戶通常可以通過按回到最小化應用,家庭或電源按鈕 ,然後從家裏恢復屏幕輕敲應用程序圖標。 我在onPause()中釋放喚醒鎖並在onResume()中獲取。

我經常看到應用程序崩潰或完全從屏幕上消失,我看到有關喚醒鎖定的日誌 。

這是控制Android電源管理器喚醒鎖定的最佳做法嗎?

歡迎任何意見。

+4

安置自己的logcat的! – Nargis

回答

0

試試這個:

wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); 

不要忘記權限:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
+0

謝謝,但我不能使用DIM。否則,它與我的解決方案相同。 – MartinC

1

附加到silvia_aut的答案,嘗試

if (wakelock.isHeld()) 
     wakelock.release(); 
+0

有沒有實現,會看到,謝謝 – MartinC

+0

如果你這樣做,你的pm和wl變量可以是本地的。像你一樣獲取你的實例已經擁有'wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,TAG);'看看它是否成立。 – TomBoo

+0

是的,這就是我所做的。謝謝,我對反饋感到滿意。 – MartinC

1

然後在你的OnCreate的setContentView後使用:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

應該有所幫助。

+0

我想這解決了舊的電源管理器常量現在已被棄用的事實。我的主要觀點是處理喚醒鎖的最佳做法是什麼。當用戶按下電源按鈕時,喚醒鎖被框架釋放。我想這是不會發生時,通過回或主頁按鈕最小化應用程序。是嗎? – MartinC

+0

根據經驗,這行代碼足以爲您的活動保留喚醒鎖。只要窗口可見,它就會保持鎖定狀態。 不需要自己處理生命週期中的喚醒鎖。 – josephus

+0

謝謝。正如你可以看到@Ritesh Gune說的是相反的...... – MartinC

3

正如你所說你在onPause()上釋放喚醒鎖並在onResume()中獲取。然而,這是一個很好的做法,我建議你在onUserLeaveHint()也發佈wakelock。

onUserLeaveHint()

@Override 
protected void onUserLeaveHint() { 

try { 
    // your code. 

    // release the wake lock 
    wl.release(); 

    }catch(Exception ex){ 
    Log.e("Exception in onUserLeaveHint", ex.getMessage); 
    } 
    super.onUserLeaveHint(); 
} 
+0

好吧,讓它實現。將會看到,謝謝 – MartinC