直播系統程式碼,Android獲取、設定鎖屏密碼

zhibo系統開發發表於2021-12-22

直播系統程式碼,Android獲取、設定鎖屏密碼實現的相關程式碼

說到密碼相關的一定要提到LockPatternUtils這個類,它是Android系統中管理鎖屏密碼的工具類,其中:

設定密碼:

class LockPatternUtils{
    /**
     * 修改密碼
     *
     * @param password 原密碼,沒有設定密碼時為null
     * @param savedPassword 新密碼
     * @param requestedQuality 密碼的型別和限制     
     * DevicePolicyManager.PASSWORD_QUALITY_SOMETHING://圖案
     * DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX://PIN碼
     * DevicePolicyManager.PASSWORD_QUALITY_COMPLEX://密碼
     * @param userHandle 當前的UserID.
     *
     */
public void saveLockPassword(String password, String savedPassword, int requestedQuality, int userHandle);
}

例項:

    /**
     * @param password 原密碼,沒有設定密碼時為null
     * @param savedPassword 新密碼
     *
     */
    private void saveLockPassword(String password, String mUserPassword) {
        try {
          LockPatternUtils lockPatternUtils = new LockPatternUtils(this);
          int userId = ActivityManager.getService().getCurrentUser().id;
          lockPatternUtils.saveLockPassword(password, mUserPassword, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX, userId);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

關於如何獲取原密碼,我鬧了一個笑話,在發現原始碼裡面的原密碼是在幾個畫面之間用Bundle存起來互相傳遞的,可是我沒有找到系統是以哪一個方法去獲取到系統密碼的,以正常的邏輯來看,獲取原密碼的方法也是應該屬於LockPatternUtils這個類,但是我就是找不到,又在畫面之間傳遞的Bundle繞暈了,臉懟螢幕看原始碼卡了我一天。

後面各種查詢,才發現Android6.0之後因為安全問題,已經刪除了查詢到密碼的方法…那系統是怎麼拿到原密碼的呢?

答案其實很簡單,進入密碼設定畫面之前系統會進行密碼驗證,LockPatternChecker類中提供了驗證密碼的方法checkPassword,當驗證成功時,輸入框裡的內容就是原密碼,再把原密碼傳遞到下一個畫面。當時我進入了系統一定有提供獲取密碼的方法這個怪圈,現在想想真的是好笑,哈哈。

驗證密碼的方法:LockPatternChecker.checkPassword:

    public static AsyncTask<?, ?, ?> checkPassword(final LockPatternUtils utils, final String password, final int userId, final LockPatternChecker.OnCheckCallback callback) {
        AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() {
            private int mThrottleTimeout;
            protected Boolean doInBackground(Void... args) {
                try {
                    LockPatternUtils var10000 = utils;
                    String var10001 = password;
                    int var10002 = userId;
                    LockPatternChecker.OnCheckCallback var10003 = callback;
                    Objects.requireNonNull(var10003);
                    return var10000.checkPassword(var10001, var10002, var10003::onEarlyMatched);
                } catch (RequestThrottledException var3) {
                    this.mThrottleTimeout = var3.getTimeoutMs();
                    return false;
                }
            }
            protected void onPostExecute(Boolean result) {
                callback.onChecked(result, this.mThrottleTimeout);
            }
            protected void onCancelled() {
                callback.onCancelled();
            }
        };
        task.execute(new Void[0]);
        return task;
    }

使用:

    private void checkPassword(String password,LockPatternChecker.OnCheckCallback checkCallback ) {
        LockPatternChecker.checkPassword(lockPatternUtils, password, userId, checkCallback);
    }

以上就是直播系統程式碼,Android獲取、設定鎖屏密碼實現的相關程式碼, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2848852/,如需轉載,請註明出處,否則將追究法律責任。

相關文章