Android开发之获取系统管理权限,即DevicePolicyManager和DeviceAdminReceiver的使用
参考: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的使用的更多相关文章
- Android开发之获取xml文件的输入流对象
介绍两种Android开发中获取xml文件的输入流对象 第一种:通过assets目录获取 1.首先是在Project下app/src/main目录下创建一个assets文件夹,将需要获取的xml文件放 ...
- Android 上SuperUser获取ROOT权限原理解析
Android 上SuperUser获取ROOT权限原理解析 一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. ...
- android开发如何获取res/raw和assets文件夹的路径
---恢复内容开始--- android开发如何获取res/raw和assets文件夹的路径,主要分为两种情况: 1.如果你只是拷贝动作,那么你只需要得到res/raw和assets文件输入流就可以, ...
- Android开发-API指南-系统权限
System Permissions 英文原文:http://developer.android.com/guide/topics/security/permissions.html 采集日期:201 ...
- Android开发之获取手机SIM卡信息
TelephonyManager是一个管理手机通话状态.电话网络信息的服务类.该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于訪问有关设 ...
- Android开发16——获取网络资源之基础应用
一.项目背景在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据.本博文介绍了获取另一个web项目的资源.有一个web项目,在其WebRoot文件夹下 ...
- android开发之——获取相册图片和路径
Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题. 比如:managed ...
- Android应用请求获取Root权限
应用获取Root权限的原理:让应用的代码执行目录获取最高权限.在Linux中通过chmod 777 [代码执行目录] /** * 应用程序运行命令获取 Root权限,设备必须已破解(获得ROOT权限) ...
- Android开发资源获取国内代理(转载)
Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Androi ...
随机推荐
- 从零开始学ios开发(十八):Storyboards(下)
这篇我们完成Storyboards的最后一个例子,之前的例子中没有view之间的切换,这篇加上这个功能,使Storyboards的功能完整呈现.在Storyboards中负责view切换的东西叫做“s ...
- 【软件工程-Teamwork 2】必应词典软件手机版测试报告
测试人员:聂健(N).居玉皓(J).吴渊渊(Wy).汪仁贵(Wr).吕佳辉(L).杜冰磊(D) 测试软件:必应词典软件手机版 版本:2.2.0版本(Android) 引言: 我们的测评报告的主体主要分 ...
- 使用parseJSON代替eval
有些程序员如果没有很好的在javascript中解析json数据,往往会直接eval把json转成js对象,这时候如果json的数据中包含了被注入的恶意数据,则可能导致代码注入的问题. 正确的做法是分 ...
- Careercup - Facebook面试题 - 5435439490007040
2014-05-02 07:37 题目链接 原题: // merge sorted arrays 'a' and 'b', each with 'length' elements, // in-pla ...
- Careercup - Facebook面试题 - 4922014007558144
2014-05-01 02:13 题目链接 原题: Design question: Say you have hacked in to a network and can deploy your b ...
- leetcode Largest Rectangle in Histogram 解法二
上一篇文章讲了该题的一个解法.后来又发现一个更好的解法. 首先依旧考虑一个升序的数列,例如1,2,3,4,5.那么它的最大矩形显然是有5种可能,即 1*5,2*4,3*3,4*2,1*5.所以最大的矩 ...
- Appium —— desired_capabilities详解
Appium 服务关键字 关键字 描述 实例 automationName 你想使用的自动化测试引擎 Appium (默认) 或 Selendroid platformName 你要测试的手机操作系统 ...
- CF 295A Greg and Array (两次建树,区间更新,单点查询)
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...
- POJ 1701
/* Every tenant went up N floors would make the dissatisfied degree rise N * a + 0.5 * N * (N - 1) d ...
- 简单易懂的现代魔法——Play Framework攻略4
接前文:简单易懂的现代魔法——Play Framework攻略3 1.The Object 时隔2个多月,Play Framework系列又更新了,本次的主题是:利用Play Framework实现R ...