Administration
一键锁屏
注意:非Activity激活不了系统设备界面 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
ComponentName who = new ComponentName(context, AdminDeviceReceiver.class);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,who);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,context.getResources().getString(R.string.screen_off_device_admin_description));
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 不要加上这句,否则激活不成功
context.startActivity(intent);
|
使用该Administration API两种方式: 1、APIs Demo 2、参考官方文档说明 Developing a Device Administration Application http://developer.android.com/guide/topics/admin/device-admin.html |
android:resource="@xml/device_admin_sample"
declares the security policies used in metadata
声明安全策略 |
1、写一个类MyAdmin继承 DeviceAdminReceiver public class MyAdmin extends DeviceAdminReceiver 2、 DeviceAdminReceiver就是一个广播接收者,是一个回调, 类似BroadcastReceiver.onReceive() public class DeviceAdminReceiver extends BroadcastReceiver 3、由于是一个广播接收者,所以需要在清单文件中进行配置 <receiver
android:name="cn.zengfansheng.administration.MyAdmin"
android:description="@string/sample_device_admin_description"
android:label="@string/sample_device_admin"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_sample" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>4、其中android:permission使用的一个安全声明策略,是一个xml文件,\res\xml\device_admin_sample.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 />
<reset-password />
<force-lock />
<wipe-data />
<expire-password />
<encrypted-storage />
<disable-camera />
</uses-policies>
</device-admin>5、在系统设置→安全→设备管理器→将√勾上 然后出现激活的界面:(如果不激活,那么一键锁屏一运行就会报错) 6、一键锁屏正常运行 |
细节: 1、如果一键锁屏应用,一开始没有获取设备管理员权限,那么会报错 2、让用户去设置开启设备管理员权限,愚蠢——一键开启设置管理员权限 public void activeAdmin(View view) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
ComponentName who = new ComponentName(this, MyAdmin.class);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, who);//要激活的应用的全路径名
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"激活设备管理权限,那么你就可以立马看到美眉了哦!"); //激活时,提示的描述信息
startActivity(intent);
} 3、软件卸载不了,必须先将设备管理员权限关闭,系统设置→安全→设备管理器,取消激活。 系统卸载应用:
/** * 3、一键卸载 * * @param view */ @SuppressLint("InlinedApi") public void uninstall(View view) { // 1、利用代码先将该应用的设备管理员权限给去掉 DevicePolicyManager manager = (DevicePolicyManager) this .getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName who = new ComponentName(this, MyAdmin.class); manager.removeActiveAdmin(who); Log.i(TAG, "取消激活了设备管理员权限"); // 2、利用系统PackageInstaller卸载掉应用 /* * <intent-filter> <action android:name="android.intent.action.DELETE" * /> <action android:name="android.intent.action.UNINSTALL_PACKAGE" /> * <category android:name="android.intent.category.DEFAULT" /> <data * android:scheme="package" /> </intent-filter> */ Intent intent = new Intent(); intent.setAction(Intent.ACTION_UNINSTALL_PACKAGE); intent.addCategory(Intent.CATEGORY_DEFAULT); // intent.setData(Uri.parse("package://+ getPackageName()"));//不要加// intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); }5、在取消激活后,如果再点击一键锁屏,会报错,因为没有设备管理员权限,所以必须先判断 Enabling the applicationIntent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, mActivity.getString(R.string.add_admin_extra_app_text)); startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN); /**
* 1、一键锁屏
*
* @param view
*/
public void lockScreen(View view) {
// 1、获取设备隐私管理器
DevicePolicyManager devicePolicyManager = (DevicePolicyManager) this.getSystemService(DEVICE_POLICY_SERVICE);
// 2、进行判断,是否激活了设备管理员权限
ComponentName who = new ComponentName(this, MyAdmin.class);
if (devicePolicyManager.isAdminActive(who)) {//2-1激活了设备管理员权限,那么直接锁屏
devicePolicyManager.lockNow();
}else {//2-2 没有激活,那么先激活,再锁屏
activeAdmin(view);
}
//devicePolicyManager.wipeData(0); // currently 0 and WIPE_EXTERNAL_STORAGE are supported.设备会重启,在下次重启的时候将设备数据全部清除掉
}
/**
* 2、一键获取设备管理员权限(参考官方文档)
* @ param view
*/
public void activeAdmin(View view) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
ComponentName who = new ComponentName(this, MyAdmin.class);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, who);//要激活的应用的全路径名
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"激活设备管理权限,那么你就可以立马看到美眉了哦!"); //激活时,提示的描述信息
startActivity(intent);
}
7、设置密码锁屏 /**
* 4、设置锁屏密码
* @param view
*/
public void setLockScreenPwd(View view) {
DevicePolicyManager manager = (DevicePolicyManager) this.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName who = new ComponentName(this, MyAdmin.class);
if (manager.isAdminActive(who)) {
manager.resetPassword("123", 0);
manager.lockNow();
} else {
activeAdmin(view);
}
} 8、清除密码锁屏 /**
* 5、清除锁屏密码
* @param view
*/
public void clearLockScreenPwd(View view){
DevicePolicyManager manager = (DevicePolicyManager) this.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName who = new ComponentName(this, MyAdmin.class);
if (manager.isAdminActive(who)) {
manager.resetPassword("", 0);
} else {
activeAdmin(view);
}
} |
开发一个自己的锁屏软件——保护开关机按钮 锁屏:一键锁屏 开锁:摇晃 |