手勢解鎖功能邏輯的實現【不含手勢解鎖界面實現】(一)

一、實現app手勢解鎖
功能要求:手勢解鎖現在來說是一個比較容易實現的功能,但是在實現這個功能的時候要考慮幾方面的因素。
具體功能點:
1.利用對屏幕開屏熄屏解鎖監聽,當手勢解鎖處於開啓狀態時,解鎖屏幕後需要進行手勢解鎖才能進入app
2.手勢解鎖處於開啓狀態時,當app沒有關閉的情況下進入後臺返回到前臺時,彈出手勢解鎖界面,解鎖後回到之前的界面

我這裏也是用的別人的手勢解鎖界面,所以我就這裏不談如何實現這個界面,我這裏和大家分享的是如何控制這個界面的出現,具體的解釋註釋裏寫的很詳細了,其他的就不在多做說明了。個人水平有限,有問題的地方大家多擔待,歡迎指導。

實現方式:
1.編寫廣播類:這裏實現的是整個跟手機屏幕相關的整套邏輯
/**
 * 亮屏、熄屏、解鎖廣播
 * Created by Administrator on 2016/12/20.
 */

public class ScreenBroadcastReceiver extends BroadcastReceiver {
    private final String TAG "ScreenBroadcastReceiver";

    @Override
    public void onReceive(final Context contextIntent intent) {
        String action = intent.getAction();

        if (Intent.ACTION_SCREEN_ON.equals(action)) {//亮屏
//            Log.e(TAG, "screen is on...");
       else if (Intent.ACTION_SCREEN_OFF.equals(action)) {//熄屏
//            Log.e(TAG, "screen is off...");
       else if (Intent.ACTION_USER_PRESENT.equals(action)) {//解鎖屏幕
//            Log.e(TAG, "screen is unlock...");
            boolean topActivity = isTopActivity(context);//應用是否處於前臺
//            Log.e(TAG, topActivity+"");
            boolean gesture_status = SpUtils.getInstance(context).getBoolean("gesture_status"false);//手勢解鎖功能開啓狀態
              String gesture_word = SpUtils.getInstance(context).getString("gesture_word""");//手勢密碼
              if (!gesture_status || gesture_word.equals("")) {//如果手勢功能處於關閉狀態或者沒有獲取存儲的頁面則不會進入手勢解鎖頁面
                return;
           }
            if (topActivity) {
                context.startActivity(new Intent(contextGestureVerifyActivity.class));//如果屏幕解鎖時,應用處於前臺則開啓手勢解鎖頁面
                App.isActive true;
            }
        }
    }

   
/**
 * Application has been open and display.
 *
 * @param context
 @return
 */
protected static boolean isTopActivity(Context context) {

    ActivityManager activityManager = (ActivityManagercontext.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);
    if (tasksInfo.size() > 0) {
        //應用程序位於堆棧的頂層
        if (PACKAGE_NAME.equals(tasksInfo.get(0).topActivity.getPackageName())) {//PACKAGE_NAME是我們的包名
            String className = tasksInfo.get(0).topActivity.getClassName();//如果開啓時是登錄頁面或者註冊頁面或者是手勢編輯頁面就返回false不讓解鎖頁面彈出
            if (className.equals(LoginActivity.class.getName()) ||
                    className.equals(RegActivity.class.getName()) ||
                    className.equals(GestureEditActivity.class.getName())) {
                return false;
            }
            return true;
        }
    }
    return false;
}

}

這樣在你要開啓廣播的點開啓廣播就好了,我是在登錄之後的首頁開啓的哦。
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_USER_PRESENT);

//開啓監聽廣播
screenBroadcastReceiver new ScreenBroadcastReceiver();
registerReceiver(screenBroadcastReceiver, filter);

這是第一部分,還有一部分是App在後臺進入前臺時候的一套解鎖頁面的彈出邏輯,正在總結中,晚些時候會發出來,歡迎大家指導。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章