今天我們來(lái)談一個(gè)問(wèn)題:應(yīng)用鎖屏。
說(shuō)老實(shí)話,這種設(shè)定目前已經(jīng)被廣泛使用了,多見(jiàn)于支付寶、京東金融、QQ等對(duì)安全性和隱私性要求較高的程序使用。
關(guān)于該功能的實(shí)現(xiàn),有不止一條解決辦法。這里就不一一列舉了,只對(duì)其中一種做詳細(xì)解釋和示例程序的代碼分享。
這里我聲明一下,好像自從寫(xiě)博客到現(xiàn)在,我一直都在用Android Studio為IDE來(lái)開(kāi)發(fā),強(qiáng)烈建議還在使用Eclipse的小伙伴盡快使用它。盡管一上來(lái)可能有些許不便,但是上手之后效率會(huì)有所提高,不信就去試試!
本文介紹的方法解決思路如下:
- 監(jiān)聽(tīng)屏幕變化,即關(guān)閉和打開(kāi)屏幕;
- 設(shè)置需要出現(xiàn)鎖屏的標(biāo)志變量,默認(rèn)值為false。當(dāng)接收到屏幕被關(guān)閉的廣播后,將其置為true。
- 在Activity生命周期onResume中,檢測(cè)上述變量值,若為true,則啟動(dòng)安全校驗(yàn)機(jī)制,反之無(wú)操作。
Demo代碼中包含的鎖屏機(jī)制提供了多種選項(xiàng),可自由組合實(shí)現(xiàn)不同的應(yīng)用解鎖效果。
步驟1 設(shè)置監(jiān)聽(tīng)器
首先我們寫(xiě)一個(gè)類(lèi),集成BroadcastReceiver,用來(lái)接收系統(tǒng)Screen off的Action。這里我才用了Java代碼中動(dòng)態(tài)注冊(cè)監(jiān)聽(tīng)器的方法,而非xml配置文件,因?yàn)檫@樣可以更方便的讓我們對(duì)監(jiān)聽(tīng)使能進(jìn)行控制。由于監(jiān)聽(tīng)器需要在代碼中進(jìn)行實(shí)例化,因此我們可以在監(jiān)聽(tīng)器相關(guān)類(lèi)中定義布爾變量,來(lái)標(biāo)識(shí)是否有了關(guān)閉屏幕的操作。代碼片段如下所示:
public class LockScreenReceiver extends BroadcastReceiver {
private boolean isNeedCheck;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
//關(guān)閉屏幕
isNeedCheck = true;
}
}
public void unRegist() {
isNeedCheck = false;
}
public boolean isNeedCheck() {
return isNeedCheck;
}
}
步驟2 動(dòng)態(tài)注冊(cè)監(jiān)聽(tīng)器
這一步驟要求我們對(duì)監(jiān)聽(tīng)器進(jìn)行動(dòng)態(tài)注冊(cè),所謂動(dòng)態(tài)注冊(cè)就是綁定到指定的控件上,由用戶(hù)自由選擇,進(jìn)行注冊(cè)和取消注冊(cè)。
具體代碼見(jiàn)Demo。下面放上Github地址:
https://github.com/XiaoWenHan/Demo_SafeScreen