技術博文2016/08/16

【蘇州APP開發】Android 啟用Deviceadmin,並進行鎖屏和恢復出廠設定

Android手機一般不用時,都會通過電源鍵來鎖定螢幕同時關閉螢幕燈。

其實從API Level 8 (也就是Android 2.2) 開始, Android提供了DevicePolicyManager類, 可以讓你的應用程式也能執行螢幕鎖定等操作。

鎖定效果:

要讓自己的應用實現該螢幕鎖定,主要需要用到以下幾個類:DevicePolicyManager

這是裝置管理的主類。通過它可以實現螢幕鎖定、螢幕亮度調節、出廠設定等功能。

DeviceAdminReceiver

該類繼承自 BroadcastReceiver 。 從原始碼可以看到,其實就是實現了一個OnReceive方法,該方法中根據不同的Action,執行相應的操作。 比如,如果啟用成功,那麼Action就是ACTION_DEVICE_ADMIN_ENABLED, 據此呼叫 onEnabled 方法。

系統原始碼:

  1.    
  2.     @Override
  3.     public void onReceive(Context context, Intent intent) {
  4.         String action = intent.getAction();
  5.         if (ACTION_PASSWORD_CHANGED.equals(action)) {
  6.             onPasswordChanged(context, intent);
  7.         } else if (ACTION_PASSWORD_FAILED.equals(action)) {
  8.             onPasswordFailed(context, intent);
  9.         } else if (ACTION_PASSWORD_SUCCEEDED.equals(action)) {
  10.             onPasswordSucceeded(context, intent);
  11.         } else if (ACTION_DEVICE_ADMIN_ENABLED.equals(action)) {
  12.             onEnabled(context, intent);
  13.         } else if (ACTION_DEVICE_ADMIN_DISABLE_REQUESTED.equals(action)) {
  14.             CharSequence res = onDisableRequested(context, intent);
  15.             if (res != null) {
  16.                 Bundle extras = getResultExtras(true);
  17.                 extras.putCharSequence(EXTRA_DISABLE_WARNING, res);
  18.             }
  19.         } else if (ACTION_DEVICE_ADMIN_DISABLED.equals(action)) {
  20.             onDisabled(context, intent);
  21.         }
  22.     }

具體中的簡單引用:

螢幕鎖定和恢復出廠設定

1.建立 MyAdmin 的廣播接受者 繼承 DeviceAdminReceiver
       <receiver android:name=”.MyAdmin”>
           <meta-data android:name=”android.app.device_admin”
               android:resource=”@xml/my_admin” />
           <intent-filter>
               <action android:name=”android.app.action.DEVICE_ADMIN_ENABLED” />
           </intent-filter>
       </receiver>

my_admin.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<device-admin xmlns:android=”http://schemas.android.com/apk/res/android”>
       <uses-policies>
               <limit-password />
               <watch-login />
               <reset-password />
               <force-lock />
               <wipe-data />
       </uses-policies>
</device-admin>

2.獲取IDevicePolicyManager

DevicePolicyManager  dm =  (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);


3.註冊廣播接受者為admin裝置

ComponentName mAdminName = new ComponentName(this, MyAdmin.class);
if (mService != null) {
       if (!mService.isAdminActive(mAdminName)) {
                   Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                   intent.putExtra (DevicePolicyManager.EXTRA_DEVICE_ADMIN,mAdminName);
                   startActivity(intent);
               }

}

4.點選事件中進行鎖屏或者清零數據處理

public void lock(View view){
       dm.resetPassword(“123”, 0);  //滑動解鎖螢幕條後需要輸入密碼(方法中新設定的密碼)才能真正解鎖
       dm.lockNow();
       
       //恢復出廠設定.
       //dm.wipeData(0);
   }

本文來自新浪部落格