Android中的关于MDM中的几个方法举例

2023-11-18

首先介绍一下MDM是什么的缩写,MDM是什么?

MDM 是 (Mobile Device Management )的缩写,中文翻译过来就是移动设备管理。随着移动设备计算能力地增强,移动设备携带越来越方便,移动化办公已经成为一种潮流,一种趋势,企业对移动设备管理的需求越来越急切。MDM是企业IT 向移动互联网过渡的平台技术,帮助企业将IT管理能力从传统的 PC 延伸到移动设备甚至 移动应用APP 。 随着时间的发展, MDM 厂商逐渐扩展出 MAM (Mobile Application Management)移动设备的应用程序管理,MEM(Mobile Email Management)移动设备的邮件管理和 MCM (Mobile Content Management)移动设备的内容管理等更多功能,但是MDM是这些管理的基础。


移动设备的管理首先定义可以对移动设备进行哪些操作,操作列表定义在xml文档,文档的路径是project_name/res/xml/文件夹下面,如下面的mdms.xml:

<?xml version="1.0" encoding="UTF-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android" >

    <uses-policies>

        <!-- 强行锁定 -->
        <force-lock />
        <!-- 清除所有数据(恢复出厂设置) -->
        <wipe-data />
        <!-- 重置密码 -->
        <reset-password />
        <!-- 限制密码选择 -->
        <limit-password />
        <!-- 监控登录尝试 -->
        <watch-login />


        <disable-camera />
    </uses-policies>

</device-admin>


然后提供一个继承DeviceAdminReceiver的子类,并在Manifest中配置如下:xml/mdms就是上文中的mdms的xml文件。

  <receiver
            android:name=".SUDeviceAdminReceiver"
            android:label="@string/app_name"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/mdms" />

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

SUDeviceAdminReceiver的代码如下:

public class SUDeviceAdminReceiver extends DeviceAdminReceiver {
    @Override  
    public DevicePolicyManager getManager(Context context) {  
     //   Logger.d("------" + "getManager" + "------");
    
        return super.getManager(context);  
    }  
    @Override  
    public ComponentName getWho(Context context) {  
      //  Logger.d("------" + "getWho" + "------");  
        return super.getWho(context);  
    }  
      
    /**
     * 禁用
     */  
    @Override  
    public void onDisabled(Context context, Intent intent) {  
       // Logger.d("------" + "onDisabled" + "------");  
          
        Toast.makeText(context, "禁用设备管理", Toast.LENGTH_SHORT).show();  
          
        super.onDisabled(context, intent);  
    }  
    @Override  
    public CharSequence onDisableRequested(Context context, Intent intent) {  
       // Logger.d("------" + "onDisableRequested" + "------");  
        return super.onDisableRequested(context, intent);  
    }  
      
    /**
     * 激活
     */  
    @Override  
    public void onEnabled(Context context, Intent intent) {  
       // Logger.d("------" + "onEnabled" + "------");  
          
        Toast.makeText(context, "启动设备管理", Toast.LENGTH_SHORT).show();  
          
        super.onEnabled(context, intent);  
    }  
    @Override  
    public void onPasswordChanged(Context context, Intent intent) {  
       // Logger.d("------" + "onPasswordChanged" + "------");  
        super.onPasswordChanged(context, intent);  
    }  
    @Override  
    public void onPasswordFailed(Context context, Intent intent) {  
       // Logger.d("------" + "onPasswordFailed" + "------");  
        super.onPasswordFailed(context, intent);  
    }  
    @Override  
    public void onPasswordSucceeded(Context context, Intent intent) {  
       // Logger.d("------" + "onPasswordSucceeded" + "------");  
        super.onPasswordSucceeded(context, intent);  
    }  
    @Override  
    public void onReceive(Context context, Intent intent) {  
       // Logger.d("------" + "onReceive" + "------");  
          
        super.onReceive(context, intent);  
    }  
    @Override  
    public IBinder peekService(Context myContext, Intent service) {  
       // Logger.d("------" + "peekService" + "------");  
        return super.peekService(myContext, service);  
    }  

}


在进行移动设备(Android移动设备)管理之前,首先要激活设备管理器,管理器激活的代码如下:


/**
     * 激活设备管理权限 成功执行激活时,DeviceAdminReceiver中的 onEnabled 会响应
     */
    private void activeManage() {
        // 启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器
        Intent intents = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);

        // 权限列表
        intents.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);

        // 描述(additional explanation)
        intents.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                "------ 其他描述 ------");

        startActivityForResult(intents, 0);
    }
   


点击下图中的激活按钮就可以对设备进行管理了。



关闭屏幕的方法:

public void closeScreen() {
                boolean active = policyManager.isAdminActive(componentName);
        if (active) {
            policyManager.lockNow();
            lockScreen(getWindow());

        }
    }

public void lockScreen(Window wind) {
        wind.clearFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
        wind.clearFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        wind.clearFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
    }


屏幕由黑变亮,跳过滑动解锁,回到Launcher的方法:

public void unlockScreen() {
        wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP
                | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "My Tag");
        wakeLock.acquire();

        // 得到键盘锁管理器对象
        keyguradLock = km.newKeyguardLock("unLock");
        // 参数是LogCat里用的Tag
        keyguradLock.disableKeyguard();
    }

允许摄像机使用的方法:

public void enableCamera() {
        policyManager.setCameraDisabled(componentName, true);
    }

禁止摄像机使用的方法:

public void disableCamera() {
        policyManager.setCameraDisabled(componentName, false);
    }

设置移动设备密码的方法:

public void encrptionDevice(String password) {

        //首先关闭屏幕,加密码的操作才会立即生效

        closeScreen();
        policyManager.resetPassword(password, 0);

    }

去除移动设备密码的方法:

public void decrptionDevice() {
        lockScreen(this.getWindow());

        //把原来设备的密码设置为空,也就相当于去除了设备的密码
        policyManager.resetPassword("", 0);
        unlockScreen();
    }


上面方法中用到的变量定义和赋值如下:

    private ComponentName componentName = null;
    public static DevicePolicyManager policyManager = null;
    private PowerManager pm;
    KeyguardManager km;
    KeyguardLock keyguradLock;

    private PowerManager.WakeLock wakeLock;



       // AdminReceiver 继承自 DeviceAdminReceiver
        componentName = new ComponentName(this, SUDeviceAdminReceiver.class);
        // 获取设备管理服务
        policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
        // 获取电源的服务
        pm = (PowerManager) getSystemService(Context.POWER_SERVICE);



还需要使用一些权限如下:

    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />



MDM的管理大概就讲到这里了,希望对大家能有所帮助。       






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android中的关于MDM中的几个方法举例 的相关文章

随机推荐

  • BP神经网络与Python实现

    人工神经网络是一种经典的机器学习模型 随着深度学习的发展神经网络模型日益完善 联想大家熟悉的回归问题 神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数 并使用该函数进行预测 网络的训练过程即为调节该函数参数提高预测精度的过程
  • three.js(相机 (Camera))

    相机类型 1透视相机 PerspectiveCamera 透视相机模拟人眼观察物体时的效果 具有近大远小的景深效果 创建透视相机需要设置视角FOV 画布宽高比 近平面和远平面距离等参数 2正交相机 OrthographicCamera 正交
  • 实验五循环结构程序设计

    一 实验目的 1 掌握在程序设计条件型循环结构时 如何正确地设定循环条件 以及如何控制循环的次数 2 了解条件型循环结构的基本测试方法 3 掌握如何正确地控制计数型循环结构进行测试的基本方法 4 了解对计数型循环结构进行测试的基本方法 5
  • linux nginx安装【docker容器怎么绑定域名?docker装nginx,nginx域名反向代理转发】centos7 docker系列

    一 安装Docker 1 查看你当前的内核版本 命令 uname r 系统的内核版本高于 3 10 2 确保 yum 包更新到最新 命令 yum update 最新此步骤可省略 3 检查本机是否已经安装docker 命令 docker v
  • 常用内存数据库三

    4 1 2 哪些场合适合使用其他的关系型数据库管理系统 RDBMS 客户端 服务器程序 如果你有许多的客户端程序要通过网络访问一个共享的数据库 你应当考虑用一个客户端 服务器数据库来替代SQLite SQLite可以通过网络文件系统工作 但
  • 压力测试工具Apache JMeter:3:压力测试报告的生成方法

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net liumiaocn article details 101362941 Apache
  • 微信小程序css篇----边框(Border)

    一 边框 border 设置对象边框的特性 1 语法 border length style color 2 style none hidden dotted dashed solid double groove ridge inset o
  • 7种有效安全的网页抓取方法,如何避免被禁止?

    网页抓取是一种从互联网上抓取网页内容的过程 但在网络抓取种相信您也经常遇到障碍 尤其是做跨境业务的 在抓取国外的网站时更有难度 但我们站在您的立场上 提供七种有效的方法来进行网页抓取而不被阻止 最大限度地降低网站禁令的风险 并帮助您应对相关
  • linux 快速安装最新稳定版nginx(CentOS8.1 64位)

    目录 CentOS8 1 安装完成已具备 yum 指令操作 低版本缺少yum 指令自行安装 启动nginx遇到错误 nginx emerg bind to 0 0 0 0 7070 failed 13 Permission denied 配
  • 不用看网课就能学到python的文章(第五天)

    目录 类 对象 实例 类中的成员 面向对象 变量 不用看网课就能学到python的文章 第二天 Why does it work的博客 CSDN博客 不用看网课就能学到python的文章 第三天 Why does it work的博客 CS
  • 自己编写DLL文件——注册——VB工程引用——标准EXE调用(含例子)

    VB6 0的 工程 引用 中有很多控件供用户使用 但有时需要自己编写dll文件以实现某些功能 本文介绍如何自己编写一个简单的dll文件 然后在win7 64位下使用regsvr32注册 并在VB6 0中引用 最后在标准EXE中调用实现某些功
  • ES 版本,及重要特性

    参考 https www cnblogs com flyrock ES release 地址 https www elastic co cn downloads past releases elasticsearch ES版本 发布日期 版
  • 熊啸锋:精准营销及推广的四个步骤,倍增你的利润

    哈喽 我是熊啸锋老师 今天分享的主题是精准营销及推广的四个步骤 作为营销人 企业老板 项目负责人 市场开发人员等 你会经常面临 如何开发客户 如何获得大量的潜在客户名单 等很多的问题 还经常有人抱怨说 我们获取的潜在客户名单不精准 成交率非
  • Linux中清空文件的方法

    Linux中清空文件的方法 平时工作过程中 经常会遇到需要清空linux中某个日志文件的方法 下面总结一下几个常用的方法 以下待清空的文件名统一使用 test txt 表示 方法1 vi 中使用 d 1 输入 vi test txt 回车
  • word添加gif

    word添加gif动图最简单的方法 无需链接无需插件 X to Y的博客 CSDN博客 word插入动图 原文链接 https blog csdn net X To Y article details 124415532 文章目录 word
  • c++ Graphics 实现俄罗斯方块

    俄罗斯方块 一 游戏规则 1 方块种类 2 操作规则 玩家可以通过 按键 功能 a 向左一格 d 向右一格 s 顺时针旋转90度 w 逆时针旋转90度 3 积分规则 玩家根据消除的行列数量获取得分 数量 得分 1行 10分 2行 30分 3
  • Vue中的import中@的作用

    这是webpack的路径别名 相关代码定义在配置文件webpack base config里 resolve 自动补全的扩展名 extensions js vue json 默认路径代理 例如 import Vue from vue 会自动
  • UVA-10603 倒水问题 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 使用广度优先搜索和优先队列 如果找到最小的点则退出 找不到就遍历所有的情况 include
  • 在vue中引入高德地图

    既然要用到高德地图首先要申请成为高德地图开发者 并申请使用高德地图的key这两点在这篇文章就不过多赘述 有需要的小伙伴可以查查资料 或者去高德地图api官网都有很详细的介绍 高德地图官网 简单提一下申请秘钥流程 web端 控制台 gt 应用
  • Android中的关于MDM中的几个方法举例

    首先介绍一下MDM是什么的缩写 MDM是什么 MDM 是 Mobile Device Management 的缩写 中文翻译过来就是移动设备管理 随着移动设备计算能力地增强 移动设备携带越来越方便 移动化办公已经成为一种潮流 一种趋势 企业