Android Device Policy Administration - litonghui/TechBlog GitHub Wiki

Android Device Policy Administration

   最近看到一篇关于设备管理器 Android Device Policy Administration Tutorial 文章,认真拜读一下,结合最近研究学习《Android Security Internals》 书中的相关设备管理介绍,学习总结如下:

Device Administration 设备管理

   在Android 2.2 系统以上引入Device Administration API,应用程序可以执行系统级别功能。如果应用程序被激活为设备管理程序,将拥有设备安全设置,不能被卸载。被授予特殊的权限,例如:锁屏、设置密码、设置存储设备加密、删除所有数据等等。
在Android 4.4 版本支持如下权限:
  • limit-password 设置密码规则,允许长度和字符
  • watch-login 监视屏幕解锁尝试次数,输入密码次数,次数过多锁定手机或删除所有数据
  • reset-password 更改屏幕解锁密码
  • force-lock 锁屏,控制锁屏方式和时间
  • wipe-data 删除所有数据,恢复出厂设置时候,系统会在不发出警告情况下删除手机上的数据
  • expire-password 设置锁屏密码的有效期,控制系统强制用户更改锁屏密码频率
  • encrypted-storage 设置存储设备加密,要求对存储的应用数据进行加密
  • disable-camera 停用相机,禁止使用所有设备相机
  • disable-keyguard-features 锁屏时警用某些功能
  • set-global-proxy 设置设备全局代理,请设置在启动政策的情况下使用设备全局代理。只有第一设备管理员才可设置有效的全局代理

Implementation

   设备管理器API 中允许如上操作,它内部实现方式,类似于许多公共AndroidAPIs,DevicePolicyManager 公开一部函数,作为底层系统服务,称为DevicePolicyManagerService,相似许多系统服务,DevicePolicyManagerService 以系统用户启动运行在系统进程中,同时享有很多Android 特殊权限。同时又区别于很多系统服务,它被授予确定特殊权限,例如在第三方软件修改锁屏密码,不需要申请特殊系统权限 。

Implementing a Device Administrator 实现设备管理

   1,声明广播请求BIND_DEVICE_ADMIN 权限
   2,声明xml 布局文件列举激活权限内容
   3,响应ACTION_DEVICE_ADMIN_ENABLED intent
  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.deviceadmin">
     --snip--
     <receiver android:name=".MyDeviceAdminReceiver"
         android:label="@string/device_admin"
         android:description="@string/device_admin_description"
         android:permission="android.permission.BIND_DEVICE_ADMIN">
         <meta-data android:name="android.app.device_admin"
              android:resource="@xml/device_admin_policy" />
         <intent-filter>
               <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
         </intent-filter>
       </receiver>
         --snip--
    </manifest>
   Android SDK 提供一个系统广播android.app.admin.DeviceAdminReceiver 用户继承,定义回调方法用于重写,onEnabled()、onDisabled()通知管理设备是否可用。isAdminActive() 方法判断是否激活为设备管理应用。设备激活为管理管理不能自己实现,系统弹出一个页面用户请求确认。对于已经激活为设备管理可以调用removeActiveAdmin()取消以激活的设备。
public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
@Override
public void onReceive(Context context, Intent intent) {
	super.onReceive(context, intent);
}
public void onEnabled(Context context, Intent intent) {
}

未完待续。。。

⚠️ **GitHub.com Fallback** ⚠️