Android下屏保程序的開發

有時候,須要在程序中實現屏保相關的功能,如指定一段時間後,顯示自定義的屏保畫面,網上查了不少資料,大多講得不詳細,或者說不完整。故對屏保相關的功能進行整理。
一、註冊一個BroadcastReceiver,用於接收ACTION_SCREEN_OFF事件。當接收到這個事件時,打開自定義的屏保畫面。如下代碼爲了測試方便,放在MainActivity.java中,也能夠根據須要,把代碼放入service中。 java

registerReceiver(mMasterResetReciever,newIntentFilter(Intent.ACTION_SCREEN_OFF));
 
BroadcastReceiver mMasterResetReciever=newBroadcastReceiver() {
    publicvoidonReceive(Context context, Intent intent){
        try{
            Intent i =newIntent();
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.setClass(context, ScreenSaverActivity.class);
            context.startActivity(i);
        }catch(Exception e){
            Log.i("Output:", e.toString());
        }
    }
};
二、完成這一步時,雖然屏幕關閉時,屏保畫面被顯示,但因爲接收的是ACTION_SCREEN_OFF事件,因此屏幕已經變黑了,這個時候就須要強制點亮屏幕。
首先,在AndroidManifest.xml中加上permission 權限:
<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>
如下代碼在ScreenSaverActivity.onCreate中
PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
mWakeLock = pm.newWakeLock(
    PowerManager.ACQUIRE_CAUSES_WAKEUP |
    PowerManager.SCREEN_DIM_WAKE_LOCK |
    PowerManager.ON_AFTER_RELEASE,"SimpleTimer");
而後在屏保畫面顯示時,點亮屏幕。在ScreenSaverActivity.onResume中加入
mWakeLock.acquire();
爲了可以在退出屏保時,可以讓屏幕能夠關閉,咱們必須釋放WakeLock.故在ScreenSaverActivity.onPause中加入
mWakeLock.acquire();
注意,必須放在onResume中,如放在別的地方。會致使程序沒法再次進入屏保,具體緣由不詳。因爲手頭只有一個手機,不能進行普遍的測試。

3. 完成第二步後,通常狀況下大功告成。按鍵就能夠返回程序。但有時候須要點擊屏幕就返回系統。這個時候會發現,不管怎麼樣點擊屏幕,系統都不會有響應,由於此時屏幕已經被鎖定。所以,要實現這個功能,在打開屏保時,須要關鍵屏幕的鎖定功能。
首先,在AndroidManifest.xml中加上permission 權限: android

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

再次,把如下這段代碼加入合適的地方。只要啓動屏保時可以被調用到 測試

KeyguardManager mKeyguardManager= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock mKeyguardLock= mKeyguardManager.newKeyguardLock(TAG);
mKeyguardLock.disableKeyguard();

固然也能夠經過如下代碼開啓屏幕鎖定功能。 ui

mKeyguardLock.reenableKeyguard();
相關文章
相關標籤/搜索