Android開發之獲取系統管理權限,即DevicePolicyManager和DeviceAdminReceiver的使用


參考:http://www.cnblogs.com/androidez/archive/2013/02/17/2915020.html

1.創建AdminReceiver,繼承DeviceAdminReceiver

1 import android.app.admin.DeviceAdminReceiver;
2 /*
3  * 設備管理器,可以設置鎖屏和清除數據。請查看API指南中的Administration
4  */
5 public class AdminReceiver extends DeviceAdminReceiver {
6 }

2.清單文件中配置:

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

3.在res/xml文件夾下創建device_admin.xml文件

 1 <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
 2   <uses-policies>
 3     <limit-password />    //設置密碼規則
 4     <watch-login />       //監控屏幕解鎖嘗試次數  
 5     <reset-password />    //更改屏幕解鎖密碼
 6     <force-lock />        //設備自動解鎖
 7     <wipe-data />         //清除數據
 8     <expire-password />   //激活密碼
 9     <encrypted-storage />   //數據加密
10     <disable-camera />    //禁用攝像頭
11   </uses-policies>
12 </device-admin>

4.在Activity中讓用戶激活

 1 public class Setup4Activity extends BaseSetupActivity {
 2     public static final int DPM_REQUEST_CODE = 201603;
 3     private CheckBox cbProtect;
 4     private ComponentName componentName;
 5     private DevicePolicyManager mDpm;
 6 
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         super.onCreate(savedInstanceState);
10         setContentView(R.layout.activity_setup4);
11         componentName = new ComponentName(Setup4Activity.this,
12                 AdminReceiver.class);
13         mDpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
14         cbProtect = (CheckBox) findViewById(R.id.cb_protect);
15         boolean protect = mPref.getBoolean("protect", false);
16         if (protect) {
17             cbProtect.setText("防盜保護已經開啟");
18             cbProtect.setChecked(true);
19         } else {
20             cbProtect.setText("防盜保護沒有開啟");
21             cbProtect.setChecked(false);
22         }
23         cbProtect.setOnCheckedChangeListener(new OnCheckedChangeListener() {
24 
25 
26             @Override
27             public void onCheckedChanged(CompoundButton buttonView,
28                     boolean isChecked) {
29 
30                 if (isChecked) {
31                     if (mDpm.isAdminActive(componentName)) {
32                         cbProtect.setText("防盜保護已經開啟");
33                         mPref.edit().putBoolean("protect", true).commit();
34                     } else {
35                         //激活設備管理器
36                         Intent intent = new Intent(
37                                 DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
38                         intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
39                                 componentName);
40                         intent.putExtra(
41                                 DevicePolicyManager.EXTRA_ADD_EXPLANATION,
42                                 "提示文字");
43                         startActivityForResult(intent, DPM_REQUEST_CODE);
44 
45                     }
46 
47                 } else {
48                     mDpm.removeActiveAdmin(componentName);
49                     cbProtect.setText("防盜保護沒有開啟");
50                     mPref.edit().putBoolean("protect", false).commit();
51                 }
52             }
53         });
54     }
55 
56     @Override
57     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
58         super.onActivityResult(requestCode, resultCode, data);
59         if ( requestCode == DPM_REQUEST_CODE ) {
60             if (resultCode == RESULT_OK) {
61                 cbProtect.setText("防盜保護已經開啟");
62                 mPref.edit().putBoolean("protect", true).commit();
63             } else {
64                 cbProtect.setText("防盜保護沒有開啟");
65                 cbProtect.setChecked(false);
66                 mPref.edit().putBoolean("protect", false).commit();
67             }
68         }
69     }
70 }

5.通過監聽短信,執行重置數據,修改密碼等功能

 1 public class SmsMangerReceiver extends BroadcastReceiver {
 2     private DevicePolicyManager mDPM;
 3     private SharedPreferences mPref;
 4 
 5     @Override
 6     public void onReceive(Context context, Intent intent) {
 7         mDPM = (DevicePolicyManager) context
 8                 .getSystemService(Context.DEVICE_POLICY_SERVICE);
 9         mPref = context.getSharedPreferences("config",
10                 Context.MODE_PRIVATE);
11         boolean protect = mPref.getBoolean("protect", false);
12         //開啟了保護以后,才會激活短信命令。
13         if ( protect ) {
14             Object[] object = (Object[]) intent.getExtras().get("pdus");
15             for ( Object ob : object ) {
16                 SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) ob,
17                         "3gpp");
18                 String originatingAddress = smsMessage.getOriginatingAddress();
19                 String messageBody = smsMessage.getMessageBody();
20                 if ( messageBody.equals("#*alarm*#") ) {
21                     // 使用MediaPlayer播放音樂
22                     MediaPlayer player = MediaPlayer
23                             .create(context, R.raw.ylzs);
24                     player.setVolume(1.0f, 1.0f);
25                     player.setLooping(true);
26                     player.start();
27                     abortBroadcast();
28                 } else if ( messageBody.equals("#*location*#") ) {
29                     // 通過service獲取到經緯度
30                     context.startService(new Intent(context,
31                             LocationService.class));
32                     abortBroadcast();
33                 } else if ( messageBody.equals("#*wipedata*#") ) {
34                     //清除數據
35                     mDPM.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);
36                     abortBroadcast();
37 
38                 } else if ( messageBody.equals("#*lockscreen*#") ) {
39                     //鎖屏並設置密碼
40                     mDPM.lockNow();
41                     mDPM.resetPassword("123456", 0);
42                     abortBroadcast();
43                 }
44             }
45         }
46     }
47 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM