补充补充设备管理员····
==================华丽的分割线,进入主题===============================
android 2.2引入设备管理api,以支持开发可执行系统安全策略并基于设备当前安全级别动态调整相关特性的应用。这种应用被称为设备管理员。
设备管理员必须在设备安全设置中显式打开,并且如果处于激活状态将无法被卸载【卸载方法,进入程序管理,关闭设备管理员权限,即可卸载。】
被打开之后,设备管理员可以获取系统特殊权利,比如锁定设备,改变锁屏密码设置擦除整个设备数据。
实现方法,DevicePolicyManagerService。
与大部分系统服务相同,DevicePolicyManagerService由System_Server进程启动,并以system用户运行,因此它可以执行大部分android特权操作。
不同之处在于,该服务可以帮助第三方应用(不需要拥有任何特殊系统权限)获取到相关的特权操作(比如修改锁屏密码)。
DevicePolicyManagerService运行时将会在内存中为每个设备用户维护一个内部的策略结构体。策略也会被保存在硬盘中的xml文件中。
设备管理员激活后,关闭操作或者策略的更新会被记录到目标用户device_policies.xml文件中。对于设备所有者用户,文件会被保存在/data/system/目录下:对于其他用户,则保存在该用户的系统目录下/data/user/<user-ID>.文件所有者是system用户,权限是0600,只有system用户才能修改。
===================华丽的分割线,上代码实现===============================
1.首先,需要定义各种政策支持个功能水平,策略可以覆盖屏幕锁定密码强度,超时时间,加密等;
eg:adminpolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<!-- 限制密码选择 -->
<limit-password />
<!-- 监控登录尝试 -->
<watch-login />
<!-- 强行锁定 -->
<force-lock />
<!-- 清除所有数据(恢复出厂设置) -->
<wipe-data />
<!-- 重置密码 -->
<reset-password />
</uses-policies>
</device-admin>
注意:必须声明所选择的策略集合,将执行应用程序xml在res.xml文件进行引入;
2.写一个广播[google官网API很详细
<receiver android:name=".Policy$PolicyAdmin"
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>
demo配置 androidManifest.xml
<receiver android:name=".broadcast.AdminReceiver"
android:label="@string/device"
android:description="@string/device_des"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/adminpolicy" />
<intent-filter>
<action
android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
3.完善广播类
public class PolicyAdmin extends DeviceAdminReceiver {
private static final String ACTION_PREF ="DeviceAdmin" ;
@Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
SharedPreferences pre=context.getSharedPreferences(ACTION_PREF,Context.MODE_PRIVATE);
pre.edit().clear().commit();
}
}
4.mainactivity
1.获取到设备管理器
mDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
2.申请权限
mComponentName = new ComponentName(this, PolicyAdmin.class);
3.判断是否有权限,没有权限跳转到赋予权限的页面.这是一个隐形的intent启动设备管理,在androidmainfest.xml中设定相应的过滤器
//启动设备管理(隐师intent) 在androidMainfest.xml中设定相应过滤器
Intent intent=new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//权限列表
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
//描述(additional explanation)
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"-----一键锁屏");
startActivityForResult(intent, 0);
4.调用锁屏方法
//已获得管理员的权限,则直接锁屏
mDevicePolicyManager.lockNow();