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 ...
随机推荐
- 阿里云mysql数据库恢复总结,mysql binlog日志解析
由于意外..阿里云mysql中有一张表被全部删除了,深吸三口气候,开始解决. 首先用凌晨的自动备份的,进行全量恢复,然后找binlog日志(见下文),查找从全量备份到数据删除之间的记录 这导致了一个问 ...
- Java 8 VM GC Tunning Guide Charter 6
第六章 并行GC The Parallel Collector The parallel collector (also referred to here as the throughput coll ...
- 历时一周,unity3d+xtion打造我的第一个休闲体感小游戏《空降奇兵》
1.游戏介绍 本游戏属于休闲小游戏,主要操作如下: 菜单控制:举起左手或右手,点击左边或者右边的菜单:挥动左手或右手,选择关卡: 操作方式:玩家跳跃,游戏中的伞兵从飞机开始降落:玩家通过控制伞兵的左右 ...
- 在云服务器搭建WordPress博客(三)安装WordPress
WordPress的安装在Windows环境下非常简单. 安装前的准备 1.下载最新版的 WordPress,解压后,将WordPress文件夹里面的所有文件,上传到你的主机空间域名所绑定的根目录. ...
- 2878: [Noi2012]迷失游乐园 - BZOJ
Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环( ...
- 1069: [SCOI2007]最大土地面积 - BZOJ
Description 在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大.Input 第1行一个正整数N,接下来N行,每行2个数x,y, ...
- 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存
http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...
- 使用mysql触发器脚本,解决流水数据的添加。
1.建立表脚本 CREATE DATABASE `spring` DEFAULT CHARACTER SET utf8; USE `spring`; CREATE TABLE `account` ( ...
- 项目后台判断session过期的页面代码
checksession.jsp <%@page import="com.bn.car.core.Constants"%> <%@page import=&quo ...
- hdu 1172 猜数字(暴力枚举)
题目 这是一道可以暴力枚举的水题. //以下两个都可以ac,其实差不多一样,呵呵 //1: //4 wei shu #include<stdio.h> struct tt { ],b[], ...