【Android设备管理】 利用DevicePolicyManager执行屏幕锁定

编程知识 更新时间:2023-05-02 02:36:49

Android手机一般不用时,都会通过电源键来锁定屏幕同时关闭屏幕灯。

 

其实从API Level 8 (也就是Android 2.2) 开始, Android提供了DevicePolicyManager类, 可以让你的应用程序也能执行屏幕锁定等操作。

 

锁定效果:

  

 

 

下面我们来看一下具体如何操作。 要让自己的应用实现该屏幕锁定,主要需要用到以下几个类:

 

 

DevicePolicyManager

这是设备管理的主类。通过它可以实现屏幕锁定、屏幕亮度调节、出厂设置等功能。

 

 

DeviceAdminReceiver

 

 该类继承自 BroadcastReceiver 。 从源码可以看到,其实就是实现了一个OnReceive方法,该方法中根据不同的Action,执行相应的操作。 比如,如果激活成功,那么Action就是ACTION_DEVICE_ADMIN_ENABLED, 据此调用 onEnabled 方法。

 

系统源码:

 

 

DeviceAdminInfo

定义设备管理类的 meta 信息。 什么意思呢? 就是定义可用的权限。define policy that this device admin can use。

 

 

比如 DeviceAdminReceiver.USES_POLICY_FORCE_LOCK , 这个就是本次要用的"强制锁定屏幕"的权限. 不过这些权限一般都直接通过XML文件来定义。 稍后你就会看到。

 

 

 


 

下面我们就来看下如何实现屏幕锁定。

注意,此处讲的屏幕锁定, 其实还是调用的系统的锁定方式。

在 "设置" - “位置与安全” - "更改屏幕锁定" 中可以设置锁定方式,一共有四种:

1. 无锁

2. 图案锁 (就是九宫图)

3. PIN锁

4. 密码锁

 

你的手机设置了哪个锁, 调用这个API时就会显示哪个锁 !

 

(锁定类型设置画面)

 

 

 

第一步: 写一个布局文件,该布局上有四个按钮, 分别对应 "激活设备管理权限" 、 "禁用设备管理权限"、"系统锁"、"自定义锁"。 

其中"自定义锁"在下一篇博文中讲。本次暂时不用。

 

布局文件如下:

 

 

效果图:

 

 

 

下面就对应的一个个实现功能。

 

1. "激活" 功能。

 

STEP1:初始化设备管理需要的几个类:

 

其中: AdminReceiver 类的代码如下:

 

 

继承了DeviceAdminReceiver,没有做什么特别操作,仅仅在激动、禁用时输出一个提示消息。

同时,像普通Broadcast类一样,该类也需要在  AndroidManifest.xml 文件中注册。

如下:

 

 

其中 

android:permission="android.permission.BIND_DEVICE_ADMIN" 和

 

<intent-filter>

<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />

</intent-filter>

 

是必须的。

 

android:resource="@xml/lock_screen" 对应的就是权限说明文件。

本次仅需要强制锁定权限。 如下:

 

 

 

STEP2: "激活"按钮 执行代码:

 

 

 

这边就是用了一个隐式Intent ,通过这个Intent (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)跳转到 权限提醒页面。 同时传递了两个参数EXTRA_DEVICE_ADMIN 、 EXTRA_ADD_EXPLANATION。

EXTRA_DEVICE_ADMIN参数中说明了用到哪些权限, EXTRA_ADD_EXPLANATION参数为附加的说明。

 

就这样,一个激活功能就完成了。 激活页面如下:

 

 

上图中" 设备管理软件说明: 我们不是黑客,请放心!" 对应的是 AndroidManifest.xml文件中  android:description="@string/device_des"。

 

"------ 其他描述 ------" 就是之前传的 EXTRA_ADD_EXPLANATION 参数。

 

个人觉得两者要一个就可以了, 不知道为什么要提供两个。

 

STEP 3: 点击"激活"。 

此时该应用就拥有了设备管理权限。 激活时 AdminReceiver 类的  onEnabled方法会被调用。

 

2. “禁用” 功能。

 

   如果在上面选择了"激活", 那么你这个应用就可以一直使用这些权限了,不需要再次激活。 但是如果想"禁用",该怎么做呢?

答案很简单,只要调用下面的方法即可.

 

 

禁用时 AdminReceiver 类的  onDisabled方法会被调用。

 

3. “系统锁”

    其实到这已经非常简单了,所有的配置及初始化,都在激活时做了。

    下面直接上调用系统锁的代码:

 

到此为止, 屏幕锁定结束了。

 

附上主要类的代码:

 

 


 

最后说一下,设备管理拥有的权限,一共就5个。

看配置文件中的说明吧。

  

 

所有权限都申请时的效果图:

 

 

 

强制屏幕锁定功能, 可以应用于一些安全软件, 比如手机安全卫士, 当手机丢失后,用户发送指令短信、或者邮件到该手机上, 让手机强制锁屏。 这样的话,及时别人捡到了,也无法使用。 

 

不过一般手机用户可能不一定会设定手机锁,因此调用系统锁可能并没有多大作用,因此下一篇我们做一个自定义锁, 该锁只在需要时启用。

 

更多推荐

【Android设备管理】 利用DevicePolicyManager执行屏幕锁定

本文发布于:2023-04-25 07:42:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/177297de58819159a220af9632f372c8.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:设备管理   屏幕   Android   DevicePolicyManager

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 102480文章数
  • 26162阅读数
  • 0评论数