Android设备管理器对于一个普通app而言似乎不太常用,但是对于研究Android安全的人而言,病毒app中最常见到的就是设备管理器。

1.设备管理类:DevicePolicyManager

DevicePolicyManager(android.app.admin.DevicePolicyManager)这是设备管理的主类,它可以完成许多系统级的命令,如锁屏,恢复出厂设置,设置密码,清空密码等。官方文档对该类的解释如下:Public interface for managing policies enforced on a device. Most must have published a DeviceAdminReceiver that the user has currently enabled. — 这个类是强制管理设备的公共接口,为了使用该类,大部分情况下需要构造一个DeviceAdminReceiver,并且将其激活(激活设备管理员权限)。接下来让我们再看看DeviceAdminReceiver。

2.特殊的广播器:DeviceAdminReceiver

DeviceAdminReceiver类继承自BroadcastReceiver,它的本质就是一个广播接收器(用于监听权限变化,比如是否激活成功等)。在源码中对该类的解释大概如下:“This class provides a convenience for interpreting the raw intent actions that are sent by the system.” — 该类能更方便的处理系统发送的intent action。他能根据不同的Action,执行相应的操作, 比如,如果激活成功,那么Action就是ACTION_DEVICE_ADMIN_ENABLED, 据此调用 onEnabled 方法 。

3.DevicePolicyManager与DeviceAdminReceiver关系总结

为了更好的理解上面所说的,先做一个小总结:DevicePolicyManager类能够完成一些特殊的操作如重设密码,清空密码,锁屏等,但是功能这么强大的东西不是可以随便使用的,得完成2件事:

  • 写一个类继承自DeviceAdminReceiver,其作用是监听系统权限的变化。
  • 注册成为设备管理员,只有管理员才能使用这么强大的工具。

4.代码实现

  1.  获取设备管理服务

    任何应用都可以通过getSystemService方法获取Android的系统服务。
  2. 写一个类继承自DeviceAdminReceiver

    这里复写了两个方法:OnEnabled和onDisabled,在激活管理员权限和取消管理员权限时毁分别调用这两个方法。
  3. 在res文件夹下新建xml目录,在xml目录下新建admin.xml文件

    该文件配置了要被注册的管理员想得到哪些权限。
  4. 在配置文件中添加广播器

    广播器的android:resource 即是刚才设置的权限配置文件,并且还要添加这个receiver的permission为 android.permission.BIND_DEVICE_ADMIN
  5. 获取广播器组件

    第一个参数为包名,第二个参数为类名 ,这句话从类名获得“组件”,在后面发送激活请求时要用到。
  6. 激活管理员权限

    用isAdminActive方法判断是否已经是设备管理员,如果不是的话构造Intent请求系统将其添加成为管理员,成为管理员后即可以使用锁屏,改密码等操作。

 5.效果图

aa1

提示用户是否同意激活这些权限

aa2

一旦激活成为系统管理员,则在setting–>apps下无法直接删除该app,取消激活之后才能uninstall

 

观看更多有关 的文章?

*

+
跳转到评论