android权限级别探索(二),设备管理器(DeviceAdmin)开启和使用及常见api

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

android设备管理器的开启方式基本都是同一套写法,所以这篇文章主要对设备管理器api做一个收集归类。

一、开启设备管理器

创建DeviceReceiver继承DeviceAdminReceiver:

public class DeviceReceiver extends DeviceAdminReceiver {
//可重写父类方法,监听密码变动、设备管理器开发关闭等,非必须。
}

AndroidManifest注册:

		<receiver
            android:name=".DeviceReceiver"
            android:description="@string/app_name"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_DEVICE_ADMIN">
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/admin" />
            <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            </intent-filter>
        </receiver>

res/xml目录下添加文件 admin.xml:

<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android/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>

激活和取消设备管理器:

			DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
       	 	ComponentName componentName = new ComponentName(context, DeviceReceiver.class);
			
			//激活
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
            context.startActivity(intent);
            
            //取消
            dpm.removeActiveAdmin(componentName);

查询设备管理器是否已经激活:

dpm.isAdminActive(componentName) //true 已激活, false未激活

二、常用api

以下用到的dpm和componentName同上文
设置最大休眠时间/待机时长

dpm.setMaximumTimeToLock(ComponentName admin, long timeMs)

禁用相机

dpm.setCameraDisabled(ComponentName admin, boolean disabled);

恢复出厂设置

dpm.wipeData(1);

密码规则

/**
     * 设置密码最少需要的小写字母
     * @param context
     */
    public static void setPwdLowletter(Context context, int num){

        DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
        dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
        dpm.setPasswordMinimumLowerCase(mAdminName, num);
    }

    /**
     * 设置密码最少需要的大写字母
     * @param context
     */
    public static void setPwdUpletter(Context context, int num){

        DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
        dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
        dpm.setPasswordMinimumUpperCase(mAdminName, num);
    }

    /**
     * 设置密码最少需要的数字
     * @param context
     */
    public static void setPwdNum(Context context, int num){

        DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
        dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
        dpm.setPasswordMinimumNumeric(mAdminName, num);
    }

    /**
     * 设置密码最少需要的符号
     * @param context
     */
    public static void setPwdSymbol(Context context, int num){

        DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
        dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
        dpm.setPasswordMinimumSymbols(mAdminName, num);
    }

    /**
     * 设置密码规则:无规则
     * @param context
     */
    public static void setPasswordUnspecified(Context context){

        DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
        dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
    }

    /**
     * 设置密码最大失败次数
     * @param mContext
     * @param count
     */
    public static void setMaximumFailedPasswordsForWipe(Context mContext, int count){
        ComponentName mAdminName = new ComponentName(mContext, DeviceReceiver.class);
        DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
        dpm.setMaximumFailedPasswordsForWipe(mAdminName, count);
    }

锁屏

	dpm.lockNow();

修改密码:拥有设备管理器权限时,在android7.0及以上设备时,该api只能对没有设置密码的设备 设置新密码,如果已经设置了密码,则api无效。但是如果拥有deviceowner权限,则api可以对已有密码的设备修改密码

dpm.resetPassword("1234", 0);//密码为1234

-android权限级别探索(一),api23以上申请普通权限常见写法,及api21查询权限方法
android权限级别探索(二),设备管理器(DeviceAdmin)开启和使用及常见api
android权限级别探索(三),设置 DeviceOwner及api收集
android权限级别探索(四),Work Profile/Profile Owner的开启与功能

更多推荐

android权限级别探索(二),设备管理器(DeviceAdmin)开启和使用及常见api

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

发布评论

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

>www.elefans.com

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

  • 102357文章数
  • 26159阅读数
  • 0评论数