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


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

    首先介绍一下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的管理大概就讲到这里了,希望对大家能有所帮助。        



    请注明出处,此文档来自“善思善学”。
  • 相关阅读:
    P2617 Dynamic Rankings[带修主席树(模板)]
    P2617 Dynamic Rankings[带修主席树(模板)]
    P4127 [AHOI2009]同类分布
    P4127 [AHOI2009]同类分布
    P4550 收集邮票 [期望dp]
    P4550 收集邮票 [期望dp]
    P3168 [CQOI2015]任务查询系统
    蓝桥杯 2的次幂表示 递归
    蓝桥杯 最大的算式 dp
    蓝桥杯 未名湖边的烦恼 递推 dp
  • 原文地址:https://www.cnblogs.com/gtgl/p/4730751.html
Copyright © 2020-2023  润新知