您好,登錄后才能下訂單哦!
import android.app.Service; import android.content.Context; import android.os.PowerManager; /** * Wake Lock是一種鎖的機(jī)制, 只要有人拿著這個(gè)鎖,系統(tǒng)就無法進(jìn)入休眠, * 可以被用戶態(tài)程序和內(nèi)核獲得. 這個(gè)鎖可以是有超時(shí)的或者是沒有超時(shí)的, * 超時(shí)的鎖會(huì)在時(shí)間過去以后自動(dòng)解鎖. 如果沒有鎖了或者超時(shí)了, 內(nèi)核就 * 會(huì)啟動(dòng)休眠的那套機(jī)制來進(jìn)入休眠. * * 一、關(guān)于int flags 各種鎖的類型對(duì)CPU 、屏幕、鍵盤的影響: * 1.PARTIAL_WAKE_LOCK:保持CPU運(yùn)轉(zhuǎn),屏幕和鍵盤燈有可能是關(guān)閉的。 * 2.SCREEN_DIM_WAKE_LOCK:保持CPU 運(yùn)轉(zhuǎn),允許保持屏幕顯示但有可能是灰的,允許關(guān)閉鍵盤燈 * 3.SCREEN_BRIGHT_WAKE_LOCK:保持CPU 運(yùn)轉(zhuǎn),允許保持屏幕高亮顯示,允許關(guān)閉鍵盤燈 * 4.FULL_WAKE_LOCK:保持CPU運(yùn)轉(zhuǎn),保持屏幕高亮顯示,鍵盤燈也保持亮度 * 5.ACQUIRE_CAUSES_WAKEUP:Normal wake locks don't * actually turn on the illumination. Instead, they cause the illumination to * remain on once it turns on (e.g. from user activity). This flag will force * the screen and/or keyboard to turn on immediately, when the WakeLock is * acquired. A typical use would be for notifications which are important for * the user to see immediately. * 6.ON_AFTER_RELEASE:f this flag is set, the user * activity timer will be reset when the WakeLock is released, causing the * illumination to remain on a bit longer. This can be used to reduce flicker if * you are cycling between wake lock conditions. * * 你能加兩個(gè)以上的標(biāo)志,這些僅能影響屏幕的行為。這些標(biāo)志當(dāng)組合中有一個(gè)PARTIAL_WAKE_LOCK時(shí)將沒有效果。 * * 二、權(quán)限獲取 要進(jìn)行電源的操作需要在AndroidManifest.xml中聲明該應(yīng)用有設(shè)置電源管理的權(quán)限。 * <uses-permission android:name="android.permission.WAKE_LOCK" /> * 你可能還需要 * <uses-permission android:name="android.permission.DEVICE_POWER" /> * * 三、WakeLock的設(shè)置是 Activiy 級(jí)別的,不是針對(duì)整個(gè)Application應(yīng)用的。 * **/ abstract class WakeLockService extends Service { private android.os.PowerManager.WakeLock mWakeLock; WakeLockService() { } /** * 獲取鎖,保持屏幕亮度。 Android中通過各種Lock鎖對(duì)電源進(jìn)行控制,需要注意的是加鎖和解鎖必須成對(duì)出現(xiàn)。 * 一般使用:這個(gè)函數(shù)在Activity的 onResume中被調(diào)用。releaseWakeLock()方法則是釋放該鎖,在Activity的onPause中被調(diào)用。 */ protected void acquireWakeLock() { if (mWakeLock == null) { //通過PowerManager的newWakeLock((int flags, String tag)方法來生成WakeLock實(shí)例。 //int Flags指示要獲取哪種WakeLock,不同的Lock對(duì)cpu、屏幕、鍵盤燈有不同影響。 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, getClass().getCanonicalName()); mWakeLock.setReferenceCounted(false); mWakeLock.acquire(); } } protected void acquireWakeLock(long timeout) { if (mWakeLock == null) { PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, getClass().getCanonicalName()); mWakeLock.setReferenceCounted(false); mWakeLock.acquire(timeout); } } /** * 釋放鎖,顯示的釋放,如果申請(qǐng)的鎖不釋放系統(tǒng)就不會(huì)進(jìn)入休眠。 */ protected void releaseWakeLock() { if(mWakeLock == null || !mWakeLock.isHeld()) { mWakeLock.release(); mWakeLock = null; } } }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。