首先介绍一下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);
     }


   


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

android mat 使用明细 android mdm_移动设备管理



关闭屏幕的方法:

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