1. 程式人生 > >Android實現自定義鎖屏控制

Android實現自定義鎖屏控制

   當在Android手機上需要實現自定義的鎖屏,  往往在進入自定義的鎖屏介面介面之前需要先解開螢幕鎖, 以順利的進入自定義鎖屏介面 ,並能方便使用者即時的做其他操作,下面用程式碼來實現這一功能: 


1、點亮螢幕與解系統鎖

//light the screen
 PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);  
 WakeLock mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP
				    		| PowerManager.SCREEN_DIM_WAKE_LOCK, "SimpleTimer");  
 mWakelock.acquire();  
 mWakelock.release();
				    
//unlock the screen
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);  
KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("");  
keyguardLock.disableKeyguard(); 


2、新增許可權

上述程式碼要實現 自動螢幕解鎖功能,還需要 在主配置檔案AndroidManifest.xml中新增許可權:

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


3、具體實現自定義鎖屏控制系統的大致思想

(1)在主介面中設計一個鎖屏控制按鈕,決定是否進入 自定義的 鎖屏 控制介面;

(2) 需要設計一個Service,在啟動時即在 onCreate方法中註冊監聽系統螢幕鎖屏的廣播行為ACTION_SCREEN_OFF: "android.intent.action.SCREEN_OFF";

(3)在上述serice中定義一個廣播接收器:如果監聽到 ACTION_SCREEN_OFF,則進入到自定義的鎖屏控制介面即啟動自定義實現的Activity;


 4、難點實現

  (1)ACTION_SCREEN_OFF該訊息需要動態註冊,不能在XML檔案中全域性註冊

  (2)收到screen_off訊息後,如何讓自己定義的鎖屏介面在系統鎖屏介面之上

  (3)點亮螢幕時,如何防止啟動自定義鎖屏介面時出現的閃屏現象

  (4)在某些機型某些時候需要點亮兩次螢幕

  (5)解自定義鎖屏時需要先解系統鎖

   (6)如何做到在解系統鎖時在多機型多Rom下的相容

   (7)如何做到在解系統鎖後不對耳機線控等行為或者其他相關行為產生影響

   (8)如何在解系統鎖後,要及時的能恢復系統鎖

    (9)有其他第三方鎖屏系統存在時,如何保證自己的鎖屏在其他所有鎖屏之上。

   (10)如何在鎖屏介面遮蔽相關按鍵,特別是遮蔽Home鍵,特別是4.0系統之上

 5、小結

        簡單的實現自定義鎖屏,我想大部分人在很短的時間內都能實現,關鍵是要整合到第三應用中要保證其能和大多數機型和Rom能相容,也就是要解決上面寫到的難點問題,比如可以實現類似天天動聽和酷狗類似的鎖屏功能 。