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

1.创建AdminReceiver,继承DeviceAdminReceiver

 import android.app.admin.DeviceAdminReceiver;
/*
* 设备管理器,可以设置锁屏和清除数据。请查看API指南中的Administration
*/
public class AdminReceiver extends DeviceAdminReceiver {
}

2.清单文件中配置:

         <receiver
android:name=".receiver.AdminReceiver"
android:description="@string/device_admin_description"
android:label="@string/device_admin"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin"/>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
</intent-filter>
</receiver>

3.在res/xml文件夹下创建device_admin.xml文件

 <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password /> //设置密码规则
<watch-login /> //监控屏幕解锁尝试次数
<reset-password /> //更改屏幕解锁密码
<force-lock /> //设备自动解锁
<wipe-data /> //清除数据
<expire-password /> //激活密码
<encrypted-storage /> //数据加密
<disable-camera /> //禁用摄像头
</uses-policies>
</device-admin>

4.在Activity中让用户激活

 public class Setup4Activity extends BaseSetupActivity {
public static final int DPM_REQUEST_CODE = 201603;
private CheckBox cbProtect;
private ComponentName componentName;
private DevicePolicyManager mDpm; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup4);
componentName = new ComponentName(Setup4Activity.this,
AdminReceiver.class);
mDpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
cbProtect = (CheckBox) findViewById(R.id.cb_protect);
boolean protect = mPref.getBoolean("protect", false);
if (protect) {
cbProtect.setText("防盗保护已经开启");
cbProtect.setChecked(true);
} else {
cbProtect.setText("防盗保护没有开启");
cbProtect.setChecked(false);
}
cbProtect.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) { if (isChecked) {
if (mDpm.isAdminActive(componentName)) {
cbProtect.setText("防盗保护已经开启");
mPref.edit().putBoolean("protect", true).commit();
} else {
//激活设备管理器
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
componentName);
intent.putExtra(
DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"提示文字");
startActivityForResult(intent, DPM_REQUEST_CODE); } } else {
mDpm.removeActiveAdmin(componentName);
cbProtect.setText("防盗保护没有开启");
mPref.edit().putBoolean("protect", false).commit();
}
}
});
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ( requestCode == DPM_REQUEST_CODE ) {
if (resultCode == RESULT_OK) {
cbProtect.setText("防盗保护已经开启");
mPref.edit().putBoolean("protect", true).commit();
} else {
cbProtect.setText("防盗保护没有开启");
cbProtect.setChecked(false);
mPref.edit().putBoolean("protect", false).commit();
}
}
}
}

5.通过监听短信,执行重置数据,修改密码等功能

 public class SmsMangerReceiver extends BroadcastReceiver {
private DevicePolicyManager mDPM;
private SharedPreferences mPref; @Override
public void onReceive(Context context, Intent intent) {
mDPM = (DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
mPref = context.getSharedPreferences("config",
Context.MODE_PRIVATE);
boolean protect = mPref.getBoolean("protect", false);
//开启了保护以后,才会激活短信命令。
if ( protect ) {
Object[] object = (Object[]) intent.getExtras().get("pdus");
for ( Object ob : object ) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) ob,
"3gpp");
String originatingAddress = smsMessage.getOriginatingAddress();
String messageBody = smsMessage.getMessageBody();
if ( messageBody.equals("#*alarm*#") ) {
// 使用MediaPlayer播放音乐
MediaPlayer player = MediaPlayer
.create(context, R.raw.ylzs);
player.setVolume(1.0f, 1.0f);
player.setLooping(true);
player.start();
abortBroadcast();
} else if ( messageBody.equals("#*location*#") ) {
// 通过service获取到经纬度
context.startService(new Intent(context,
LocationService.class));
abortBroadcast();
} else if ( messageBody.equals("#*wipedata*#") ) {
//清除数据
mDPM.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);
abortBroadcast(); } else if ( messageBody.equals("#*lockscreen*#") ) {
//锁屏并设置密码
mDPM.lockNow();
mDPM.resetPassword("123456", 0);
abortBroadcast();
}
}
}
}
}

Android开发之获取系统管理权限,即DevicePolicyManager和DeviceAdminReceiver的使用的更多相关文章

  1. Android开发之获取xml文件的输入流对象

    介绍两种Android开发中获取xml文件的输入流对象 第一种:通过assets目录获取 1.首先是在Project下app/src/main目录下创建一个assets文件夹,将需要获取的xml文件放 ...

  2. Android 上SuperUser获取ROOT权限原理解析

    Android 上SuperUser获取ROOT权限原理解析 一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. ...

  3. android开发如何获取res/raw和assets文件夹的路径

    ---恢复内容开始--- android开发如何获取res/raw和assets文件夹的路径,主要分为两种情况: 1.如果你只是拷贝动作,那么你只需要得到res/raw和assets文件输入流就可以, ...

  4. Android开发-API指南-系统权限

    System Permissions 英文原文:http://developer.android.com/guide/topics/security/permissions.html 采集日期:201 ...

  5. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...

  6. Android开发16——获取网络资源之基础应用

    一.项目背景在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据.本博文介绍了获取另一个web项目的资源.有一个web项目,在其WebRoot文件夹下 ...

  7. android开发之——获取相册图片和路径

    Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题. 比如:managed ...

  8. Android应用请求获取Root权限

    应用获取Root权限的原理:让应用的代码执行目录获取最高权限.在Linux中通过chmod 777 [代码执行目录] /** * 应用程序运行命令获取 Root权限,设备必须已破解(获得ROOT权限) ...

  9. Android开发资源获取国内代理(转载)

    Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Androi ...

随机推荐

  1. 关于IOS中的delegate必须知道的事情

    当你开始写iOS程式不久,应该开始面对到很多的delegate, 不管是用别人的library或是自己写library,可能都逃不了delegate. 为了怕有些人不知道什么是delegate,在这边 ...

  2. iOS 进阶 第八天(0407)

    0407 UIPickerView.UIDatePicker和UIToolBar请参见视频和代码 pch文件 #ifdef __OBJC__ //在这里面写oc的引用,比如一些oc的头文件或者NSLo ...

  3. 微软职位内部推荐-Sr SDE for Win Apps Ecosystem

    微软近期Open的职位: Job posting title: Senior Software Design Engineer Location: China, Beijing Level: 63 D ...

  4. VBS基础篇 - 条件语句

    经常地,当我们编写代码时,我们需要根据不同的判断执行不同操作,我们可以使用条件语句完成这个工作. If...Then...Else 在下面的情况中,您可以使用 If...Then...Else 语句: ...

  5. android开发 PopupWindow 设置充满屏幕

    View qrcode_view = this.getLayoutInflater().inflate(R.layout.taskdetail_qrcode,null); final PopupWin ...

  6. Android journey 1@关于编码风格和命名规范

    /* * 1.关于编程风格:每一位程序猿可能都有自己独特的编程风格,但是有些规则是大家都必须遵守的,特别 * 是在工作的过程中,良好的代码风格能大大提高代码本身的可阅读性和维护性,也更有利于别人修改你 ...

  7. 1562: [NOI2009]变换序列 - BZOJ

    Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤ ...

  8. 1069: [SCOI2007]最大土地面积 - BZOJ

    Description 在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大.Input 第1行一个正整数N,接下来N行,每行2个数x,y, ...

  9. 剑指offer--面试题9

    题目一:求斐波那契数列第n项 自己所写代码如下: #include "stdafx.h" #include<iostream> long Fibonacci(unsig ...

  10. Consumer closed input channel or an error occurred. events=0x8 channel is unrecoverably broken and will be disposed(待解决)

    跟文件读取有关?关闭文件读取试试. 有可能是读取文件 出现报错