android 鎖屏程序開發
參考http://blog.csdn.net/wdaming1986/article/details/8837023
鎖屏程序的步驟如下: 1、替換系統鎖屏 2、屏蔽Home鍵,back鍵、menu鍵 3、鎖屏程序不出現在最近任務列表中 4、屏幕喚醒時顯示鎖屏界面
一、替換系統鎖屏
調研市場絕大部分鎖屏程序,會引導用戶關閉系統鎖屏。當用戶不關閉系統鎖屏的時候我們可以將我們自定義的鎖屏程序覆蓋在系統鎖屏程序上,解鎖系統鎖屏。
具體做法如下:
api level 小于13時:
mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock =mKeyguardManager.newKeyguardLock(“FxLock”);
// 屏蔽手機內置的鎖屏 if (Build.VERSION.SDK_INT < 13) { mKeyguardLock.disableKeyguard(); }
大于13時,我們設置為自定義鎖屏界面的window添加WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD標記
2、屏蔽Home鍵
back、menu鍵我們可以在onKey()函數中進行屏蔽。由于系統安全原因,home鍵不能使用常規方式屏蔽
目前了解到的方式如下:
1、2.3以下系統
@Override
public void onAttachedToWindow () {
System.out.println("Page01 -->onAttachedToWindow"); this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow();
}
2、4.0系統
static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;
getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED)
3、4.0以上系統
彈出type為 WindowManager.LayoutParams.TYPE_SYSTEM_ERROR
的對話框(具體原理可參考PhoneWindowManager.java)此種方式據說在小米、魅族等系統無效(實測miui6無效,華為手機有效)
以上3中解決方案均來自互聯網,實際調研發現鎖屏應用中snap效率鎖屏目前是做的比較好的。通過反編譯其代碼可以發現其使用了第三種解決方案,并且對小米、魅族系統單獨做了適配。
3、鎖屏應用不出現在任務列表
這個在manifest中添加android:excludeFromRecents=“true"即可
4、屏幕喚醒顯示自定義鎖屏
目前通用做法是啟動后臺service,在service中注冊廣播接收器(Intent.ACTION_SCREEN_ON, Intent.ACTION_SCREEN_OFF, Intent.ACTION_BOOT_COMPLETED, Intent.ACTION_CLOSE_SYSTEM_DIALOGS)
在收到Intent.ACTION_SCREEN_ON廣播后,啟動自定義鎖屏界面
收到Intent.ACTION_CLOSE_SYSTEM_DIALOGS廣播(長按電源鍵),隱藏type為 WindowManager.LayoutParams.TYPE_SYSTEM_ERROR的對話框,這樣便可以顯示系統關機對話框。