0
点赞
收藏
分享

微信扫一扫

一键锁屏双击锁屏

素锦时年_1b00 2022-03-11 阅读 60

锁屏

方法一: 利用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

举报

相关推荐

0 条评论