Android手勢密碼實(shí)踐

手勢密碼

最近項(xiàng)目需要需要做一個手勢密碼功能,所以查找了一下相關(guān)的資料.其實(shí)Github上面相關(guān)的開源控件還是很多的,大體上實(shí)現(xiàn)也是類似的,本次使用的手勢密碼的開源框架的庫是DreaminginCodeZH的PatternLock.另外一方面,其實(shí)實(shí)現(xiàn)手勢密碼的核心還是在于手勢密碼的觸發(fā)機(jī)制,這一點(diǎn)就涉及到應(yīng)用在前臺與后臺之間切換狀態(tài)的監(jiān)控了.

實(shí)現(xiàn)步驟

稍微逛了一下簡書和CSDN,發(fā)現(xiàn)在監(jiān)控應(yīng)用前后臺切換狀態(tài)方面也有幾種實(shí)現(xiàn)方式,本文選擇一種比較簡單的方式進(jìn)行說明.

1.首先是需要繼承Application類實(shí)現(xiàn)自己的的自定義Application.

2.在自定義的Application的onCreate()方法中使用registerActivityLifecycleCallbacks()方法,該方法引用的匿名類中的方法可以實(shí)現(xiàn)對應(yīng)用的所有Activity進(jìn)行狀態(tài)統(tǒng)計(jì),從而達(dá)到監(jiān)控應(yīng)用前后臺切換狀態(tài)的效果.

3.加入一些判斷條件,例如在我們的應(yīng)用中就加入了判斷應(yīng)用是冷啟動還是熱啟動的條件,從而達(dá)到實(shí)現(xiàn)某些特定的需求.

實(shí)現(xiàn)如下

    private long time = -2;
    private int count = 0;
    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
    
                @Override
                public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                    LogUtils.D(TAG, "onActivityCreated()");
                }
    
                @Override
                public void onActivityStarted(Activity activity) {
                    LogUtils.D(TAG, "onActivityStarted()");
                    if (count == 0) {
                        //Log.v("tag", ">>>>>>>>>>>>>>>>>>>切到前臺  lifecycle");
                        // 首先計(jì)算時間 網(wǎng)絡(luò)請求判斷是否進(jìn)入手勢密碼驗(yàn)證界面
                        LogUtils.D(TAG, ">>>>>>>>>>>>>>>>>>>切到前臺  lifecycle");
                            if (-2 == time) {
                                //判斷進(jìn)入解鎖手勢密
                            }
                        } else {
                             Date date2 = new Date();
                             long returnTime = date2.getTime();
                             double sub = new BigDecimal(returnTime).subtract(new BigDecimal(time)).doubleValue();
                             if (sub >= 3000d) {//此處是判斷應(yīng)用到后臺多久時間以后需要開啟手勢密碼
                                    //判斷進(jìn)入解鎖手勢密碼\                                } else {
                                    time = -1;
                             }
                    } else {
                        if (-2 == time) {
                            //判斷進(jìn)入解鎖手勢密                             }
                        }
                        time = -1;
                    }
                    count++;
                }
    
                @Override
                public void onActivityResumed(Activity activity) {
                    LogUtils.D(TAG, "onActivityResumed()");
    
                }
    
                @Override
                public void onActivityPaused(Activity activity) {
                    LogUtils.D(TAG, "onActivityPaused()");
                }
    
                @Override
                public void onActivityStopped(Activity activity) {
                    LogUtils.D(TAG, "onActivityStopped()");
                    count--;
                    if (count == 0) {
                        LogUtils.D(TAG, ">>>>>>>>>>>>>>>>>>>切到后臺  lifecycle");
                        Date date = new Date();
                        time = date.getTime();
                    } else {
                        time = -1;
                    }
                }
    
                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                    LogUtils.D(TAG, "onActivitySaveInstanceState()");
                }
    
                @Override
                public void onActivityDestroyed(Activity activity) {
                    LogUtils.D(TAG, "onActivityDestroyed()");
                }
            });

好了,一個簡單的手勢密碼功能就這樣子實(shí)現(xiàn)了.這是我用MarkDown軟件寫的第一篇文章,也是我近幾年第一次寫的公開的正兒八經(jīng)的文章吧,以后多堅(jiān)持寫作,積累,不會寫不是不寫的理由,而是多寫的動力.Let's keep on moving.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容