歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android設備管理員——DevicePolicyManager

Android設備管理員——DevicePolicyManager

日期:2017/3/1 11:15:03   编辑:Linux編程

Android 2.2 SDK提供了一個可管理和操作設備的API叫DevicePolicyManager,使用這個API你可以接管手機的應用權限,對手機做出很多大膽的操作,比如鎖屏、恢復出廠設置、設置密碼、強制清除密碼,修改密碼、設置屏幕燈光漸暗時間間隔等操作。

這個API讓你的程序直接掌握了系統的命脈。

但是,同樣的道理,別人也可以做類似的程序,各程序之間的權限是不起沖突的~

首先,要想調用DevicePolicyManager,那麼我們必須先要注冊一個admin,如何注冊呢,也是需要通過代碼去注冊。有了admin權限,我們才可能對系統進行上述功能的操作。

其次,程序在啟動激活的時候,會給用戶相應提示,只有當用戶點擊“激活”後,我們的代碼才能真正的運轉。(其實我也想跳過用戶激活操作,但是還沒研究出來...如果成功了,那就算是真正的成功了)

再有,就是創建權限啊,監聽了。

下面來看代碼:

第一步,注冊一個廣播類,用於監聽權限的變化:

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

android:permission 表示此功能需要的權限。

android:name="android.app.action.DEVICE_ADMIN_ENABLED"表示此動作的跳轉界面。

<meta-data android:name="android.app.device_admin"android:resource="@xml/device_admin" />表示這個應用可以管理的權限清單。

XML清單:

  1. <span style="color:#000000;"><?xml version="1.0" encoding="utf-8"?>
  2. <device-admin xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>">
  3. <uses-policies>
  4. <limit-password />
  5. <watch-login />
  6. <reset-password />
  7. <force-lock />
  8. <wipe-data />
  9. </uses-policies>
  10. </device-admin></span>

<uses-policies></uses-policies>中間的內容是可以不要的。

因為這部分是系統給的提示語,而我們在自己做程序的時候,可以輸入自己想寫的內容。

第二步,廣播服務類的JAVA代碼,重寫一些必要的實現函數:

廣播類deviceAdminReceiver 繼承DeviceAdminReceiver

  1. package cn.etzmico;
  2. import android.app.admin.DeviceAdminReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.SharedPreferences;
  6. import android.widget.Toast;
  7. public class deviceAdminReceiver extends DeviceAdminReceiver {
  8. /**
  9. * 獲取設備存儲的數值
  10. *
  11. * @param context
  12. * @return
  13. */
  14. public static SharedPreferences getDevicePreference(Context context) {
  15. return context.getSharedPreferences(
  16. DeviceAdminReceiver.class.getName(), 0);
  17. }
  18. // 密碼的特點
  19. public static String PREF_PASSWORD_QUALITY = "password_quality";
  20. // 密碼的長度
  21. public static String PREF_PASSWORD_LENGTH = "password_length";
  22. public static String PREF_MAX_FAILED_PW = "max_failed_pw";
  23. void showToast(Context context, CharSequence text) {
  24. Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
  25. }
  26. @Override
  27. public void onEnabled(Context context, Intent intent) {
  28. // TODO Auto-generated method stub
  29. showToast(context, "設備管理:可用");
  30. }
  31. @Override
  32. public void onDisabled(Context context, Intent intent) {
  33. // TODO Auto-generated method stub
  34. showToast(context, "設備管理:不可用");
  35. }
  36. @Override
  37. public CharSequence onDisableRequested(Context context, Intent intent) {
  38. // TODO Auto-generated method stub
  39. return "這是一個可選的消息,警告有關禁止用戶的請求";
  40. }
  41. @Override
  42. public void onPasswordChanged(Context context, Intent intent) {
  43. // TODO Auto-generated method stub
  44. showToast(context, "設備管理:密碼己經改變");
  45. }
  46. @Override
  47. public void onPasswordFailed(Context context, Intent intent) {
  48. // TODO Auto-generated method stub
  49. showToast(context, "設備管理:改變密碼失敗");
  50. }
  51. @Override
  52. public void onPasswordSucceeded(Context context, Intent intent) {
  53. // TODO Auto-generated method stub
  54. showToast(context, "設備管理:改變密碼成功");
  55. }
  56. }

第三步,也就是最關鍵的操作代碼了

激活相關

  1. Intent intent = new Intent(
  2. DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
  3. intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
  4. mDeviceComponentName);
  5. intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
  6. "(自定義區域2)");
  7. startActivityForResult(intent, RESULT_ENABLE);

代碼中的自定義區域2是可以輸入一些自己想說的話,和廣播類中的android:description="@string/description"一樣。

這個是系統提供的兩個自定義區域。

  1. <string name="description">(可自定義區域1)</string>

鎖屏相關

  1. mDPM.lockNow();

鎖屏操作,由於是模擬器不能做到真正錯屏,只能停到初始模擬器進來需要解鎖的狀態,屏幕不會變暗。

設置屏幕燈光變暗時間相關

  1. long timeout = 1000L * Long.parseLong(et.getText().toString());
  2. mDPM.setMaximumTimeToLock(mDeviceComponentName, timeout);
  3. mDPM.wipeData(0);

et是定義的一個EditText,用於進行時間的輸入

屏幕變暗最小時間為5秒

恢復出廠設置相關

  1. mDPM.wipeData(0);

恢復出廠設置只能通過真機去操作,模擬器操作後會停留在正在關機的dialog畫面

恢復後數據會被清空,因此要做好備份操作

Copyright © Linux教程網 All Rights Reserved