Androidはデバイスマネージャで管理者になって画面をロックします

4512 ワード

ほとんどの場合、DevicePolicyManagerでDEVICEを取得することができます.POLICY_SERVICEサービスは、startActivityでアクティブ化されます.しかし、このような弊害は、deviceAdminインタフェースから飛び出してアクティブにすることです.
今日はstartActivityで管理者をアクティブにしない方法を共有しますが、システム権限が必要であることが前提です.
1、まずDevicePolicyManagerサービスを取得し、ComponentNameを作成する.
mDpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);

mComponentName = new ComponentName(mContext, XXX.class);

2、AndroidManifest.xmlにラベルを追加
<receiver android:name="XXXXXX"  
     android:label="@string/app_name"  
     android:description="@string/app_name"  
     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>

res/xmlにlock_を追加screen.xmlファイルの内容は次のとおりです.
   
<device-admin  
  xmlns:android="http://schemas.android.com/apk/res/android">  
    <uses-policies>  

        <force-lock />  

        <wipe-data />  

        <reset-password />  

         <limit-password />  

          <watch-login />  
    uses-policies>  
device-admin> 

3、最后にシステムhideタイプのインタフェースsetActiveAdminを呼び出して管理者をアクティブにします.この时、デバイスを操作して、ロック画面のパスワードを制御することができます.
private void lockScreen(String passWord){
        boolean bActive = mDpm.isAdminActive(mComponentName);
        if (bActive) {
            mDpm.resetPassword(passWord, 0);
            mDpm.lockNow();
        } else {
            setActiveAdmin();
            mDpm.resetPassword(passWord, 0);
            mDpm.lockNow();
        }

}

private void setActiveAdmin() {
    try {
        mDpm.setActiveAdmin(mComponentName, true);

    } catch (RuntimeException e) {
       // Something bad happened...  could be that it was
       // already set, though.
       Log.w(TAG, "Exception trying to activate admin "
            + mComponentName, e);

   }
}