1.DeviceAdminReceiver:设备管理接收者,该类提供了系统发出的意图动作。你的设备管理应用程序必须包含一个
DeviceAdminReceiver 的子类。代表着手机上的设备管理器。
2.DevicePolicyManager 设备管理员
1.创建一个类继承DeviceAdminReceiver
public class MyReceiver extends DeviceAdminReceiver {
}
2.配置 manifest
<receiver android:name=".MyReceiver"
android:label="@string/sample_device_admin"
android:description="@string/sample_device_admin_description"
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>
3.实现锁屏
<span style="white-space:pre"> </span>DevicePolicyManager dm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
<span style="white-space:pre"> </span>dm.lockNow();
4.报异常,因为没有激活
<span style="white-space:pre"> </span>Caused by: java.lang.SecurityException: No active admin owned by uid 10048 for policy #3
5.激活
<span style="white-space:pre"> </span>mComponentName = new ComponentName(this, MyReceiver.class);
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活");
startActivity(intent);
6.激活的应用无法直接卸载
<span style="white-space:pre"> </span>//移除管理员权限
mDm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
mDm.removeActiveAdmin(mComponentName);
//卸载
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DELETE);
intent.setData(Uri.parse("package:"+getPackageName()));
startActivity(intent);