Android 呼叫系統鎖屏 - Password LockScreen

這篇文章主要介紹如何使用程式碼呼叫系統鎖屏.

Step 1: 增加權限

首先要先在AndroidManifest.xml 中增加權限

AndroidManifest.xml
1
2
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Step 2: 宣告使用權限

在res中新增加xml資料夾, 並在此xml資料夾中新增 lock_screen.xml

lock_screen.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<device-admin
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<!-- 强行鎖定 -->
<force-lock />
<!-- 重置密碼 -->
<reset-password />
<!-- 限制密碼選擇 -->
<limit-password />
<!-- 監控登錄 -->
<watch-login />
</uses-policies>
</device-admin>

Step 3: 新增AdminReceiver.java

AdminReceiver.java
1
2
3
public class AdminReceiver extends DeviceAdminReceiver {
private final String TAG = "AdminReceiver";
}

AndroidManifest.xml 的設定

AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
<receiver android:name=".AdminReceiver"
android:label="@string/app_name"
android:description="@string/app_des"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/lock_screen" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>

Step 4: 宣告DevicePolicyManager

1
2
private DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
private ComponentName mComponentName = new ComponentName(this, AdminReceiver.class);

Step 5: 取得機器權限

1
2
3
4
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "------ 其他描述 ------");
startActivityForResult(intent, 0);

Step 6: 呼叫系統密碼鎖屏, 並設定密碼

1
2
3
4
mDevicePolicyManager.setPasswordQuality(mComponentName, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
mDevicePolicyManager.setPasswordMinimumLength(mComponentName, 5);
mDevicePolicyManager.resetPassword("nick6425", DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
mDevicePolicyManager.lockNow();

Step 7: 取消密碼鎖屏, 恢復滑動鎖屏

此方法在Android 5.0.x 無法使用, Android 5.1.x已修正

1
2
3
mDevicePolicyManager.setPasswordQuality(mComponentName, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
mDevicePolicyManager.setPasswordMinimumLength(mComponentName, 0);
mDevicePolicyManager.resetPassword("", DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);

Step 8: 取消機器權限

1
mDevicePolicyManager.removeActiveAdmin(mComponentName);
作者

Nick Lin

發表於

2016-06-22

更新於

2023-01-18

許可協議


評論