安卓学习笔记之使用设备管理器(Administrator)

安卓学习笔记之使用设备管理器(Administrator)

设备管理器的作用:

.锁定屏幕
.擦除数据(或恢复出厂设置)
.设置密码状态(重置密码 、限制密码长度、密码过期时间等)
.监视登录状态
.禁用摄像头
.加密存储
.禁用锁屏相关特性
.等

使用设备管理器的步骤:

1、获取设备管理器

DevicePolicyManager = policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); //获取设备管理器
ComponentName componentName = new ComponentName(this, AdminReceiver.class); //创建设备组件 需要创建AdminReceiver

2.创建AdminReceiver

public class AdminReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

    }

}

3.在src目录下创建xml文件夹 并创建device_admin.xml文件 详细如下

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
    <disable-keyguard-features />
  </uses-policies>
</device-admin>

4、在values目录的strings文件中创建设备名称与描述

<resources>
    <string name="admin_description">设备管理器功能描述string>
    <string name="admin">设备管理器名称string>
resources>

5、AndroidManifest.xml中声明AdminReceiver

<receiver
            android:name="com.yu.onekeylock.AdminReceiver"
            android:description="@string/admin_description"
            android:label="@string/admin"
            -声明需要的权限-->
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_admin" />

            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            intent-filter>
        receiver>

6、使用设备管理器
在使用之前,需要判断是否激活

public void doit(View view) {
// 判断设备管理器是否激活
  if (policyManager.isAdminActive(componentName)) {
                    policyManager.lockNow(); // 锁屏
//                  policyManager.resetPassword("123456", 0); //重置密码
//                  policyManager.wipeData(flags);
                    finish();
                }else{
                    Toast.makeText(MainActivity.this    , "必须先激活设备管理器!", 1).show();
                    activateManage();
                }
}

激活设备管理器:

private void activateManage() {
        // 隐式启动
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        //附加数据
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
        //描述
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后可以方便锁屏等操作");

        startActivity(intent);
    }

激活设备管理器后就可以进行相关功能操作了

                    policyManager.lockNow(); // 锁屏
//                  policyManager.resetPassword("123456", 0); //重置密码
//                  policyManager.wipeData(flags);
                    ...

注:要卸载应用时,需先取消激活设备管理器

public void unInstall(View view) {
        // 取消激活
        policyManager.removeActiveAdmin(componentName);
        // 卸载程序
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setData(Uri.parse("package:" + getPackageName()));
        startActivity(intent);
    }

Admin工具类:

/**
 * 
Author: pecuyu *
Date: 2017/12/8 *
TODO:Admin工具类 */
public class AdminUtil { private Context mContext; private final DevicePolicyManager policyManager; private final ComponentName componentName; public AdminUtil(Context context) { mContext = context; policyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); componentName = new ComponentName(context, AdminReceiver.class); } public void activateAdmin() { // 隐式启动 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); //附加数据 intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); //描述 intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后可以方便锁屏等操作"); mContext.startActivity(intent); } public void uninstall() { // 取消激活 policyManager.removeActiveAdmin(componentName); // 卸载程序 Intent intent = new Intent(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:" + mContext.getPackageName())); mContext.startActivity(intent); } // 判断设备管理器是否激活 public boolean isAdminActive() { return policyManager.isAdminActive(componentName); } public void lockNow() { policyManager.lockNow(); // 锁屏 } public void disableCamera(boolean enable) { policyManager.setCameraDisabled(componentName, enable); } /** * * @param flags * {@link DevicePolicyManager#WIPE_EXTERNAL_STORAGE} and { * @link DevicePolicyManager#WIPE_RESET_PROTECTION_DATA}. */ public void wipeData(int flags) { policyManager.wipeData(flags); } /** * 关闭特性功能 * * @param which which feature to disable
* know features:
*
{@link DevicePolicyManager#KEYGUARD_DISABLE_FEATURES_NONE} (default), *
{@link DevicePolicyManager#KEYGUARD_DISABLE_WIDGETS_ALL}, *
{@link DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS}, *
{@link DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, *
{@link DevicePolicyManager#KEYGUARD_DISABLE_SECURE_NOTIFICATIONS}, *
{@link DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT}, *
{@link DevicePolicyManager#KEYGUARD_DISABLE_FEATURES_ALL} */
@TargetApi(Build.VERSION_CODES.LOLLIPOP) public void disableFeature(int which) { policyManager.setKeyguardDisabledFeatures(componentName, which); } }

你可能感兴趣的:(Android)