锁屏
方法一: 利用DevicePolicyManager执行屏幕锁定
流程:
1、获的DevicePolicyManager的实例;
2、申请设备管理权限(管理员权限);
3、调用DevicePolicyManager的API,完成息屏等其他需求得到操作
1. 获的DevicePolicyManager的实例
//获取设备管理服务
devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
componentName = new ComponentName(this, DeviceAdminReceiver.class);
//像普通Broadcast类一样,该类也需要在 AndroidManifest.xml 文件中注册。
<!-- 设备管理 -->
<receiver android:name="android.app.admin.DeviceAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/lock_screen" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
android:resource="@xml/lock_screen" 对应的就是权限说明文件。
本次仅需要强制锁定权限。 如下:
<?xml version="1.0" encoding="UTF-8"?>
<device-admin>
<uses-policies>
<!-- 强行锁定 -->
<force-lock />
</uses-policies>
</device-admin>
2. 申请设备管理权限(管理员权限)
3. 调用DevicePolicyManager的API,完成锁屏等其他需求得到操作
// 判断是否获得管理员权限
boolean active = devicePolicyManager.isAdminActive(componentName);
if (active) {
//已经获取管理员权限
devicePolicyManager.lockNow();
} else {
//启动系统activity让用户激活管理员权限
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
startActivityForResult(intent, 0);
}
备注:
1、DeviceAdminReceiver可以直接使用,没有其它需求不必新建类继承于它。记得注册就好,要加权限android:permission=“android.permission.BIND_DEVICE_ADMIN”
2、管理员权限需要申请通过后,调用锁屏API才能起作用;
方法二
如果是系统开发,可以发广播通知systemui去进行lock screen action。
参考:
https://blog.csdn.net/demonjsj/article/details/77372900
https://blog.csdn.net/black_bird_cn/article/details/79735794
https://blog.csdn.net/fengltxx/article/details/52334428