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的管理大概就讲到这里了,希望对大家能有所帮助。
Android中的关于MDM中的几个方法举例的更多相关文章
- 在Android中,使用Kotlin的 API请求简易方法
原文标题:API request in Android the easy way using Kotlin 原文链接:http://antonioleiva.com/api-request-kotli ...
- Android什么时候进行View中Background的加载
对大多数Android的开发者来说,最经常的操作莫过于对界面进行布局,View中背景图片的加载是最经常做的.但是我们很少关注这个过程,这篇文章主要解析view中背景图片加载的流程.了解view中背景图 ...
- iOS/Android 浏览器(h5)及微信中唤起本地APP
在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这是一个既直观又很好的用户体验,但在实现过程中会遇到各种问题: ...
- 【笔记】android sdk集成的eclipse中导入项目
android sdk集成的eclipse中导入项目 想要把旧的ADT项目,一模一样的导入进来,需要: 1.把项目放到,非当前ADT的workspace目录下: 2.从Project中Import,选 ...
- Android安全开发之WebView中的地雷
Android安全开发之WebView中的地雷 0X01 About WebView 在Android开发中,经常会使用WebView来实现WEB页面的展示,在Activiry中启动自己的浏览器,或者 ...
- 【转】Android 当打开“开发者模式”中的“不保留活动”后,程序应当怎么保持正常运行
当打开这个设置以后,程序的Activity会自动销毁,每次返回的时候就会不断重oncreate,此时伴随的问题多多. 参考文档:http://www.bubuko.com/infodetail-960 ...
- Android开发中,那些让您觉得相见恨晚的方法、类或接口
Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...
- 转 Android学习笔记: 学习过程中碰到的一些问题及解决方法
在学习Android开发的过程中遇到了不少的问题,所幸的是最终经过上网查询都得到了解决.现在将我在学习Android开发过程中遇到的一些问题及解决的方法整理如下. 1.R.java不能实时更新 问题描 ...
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...
随机推荐
- 搭建ODS的几套解决方案对比
公司业务,想要搭建一个医院的ODS服务器:将医院不同厂家的不同数据库版本数据库类型整到一台服务器中,最初想要是同步数据库原生同步机制,最理想的是sqlserver发布订阅,但是后来发现发布订阅不能发布 ...
- flume 1.7 安装与使用
Flume安装 系统要求: 需安装JDK 1.7及以上版本 1. 下载二进制包 下载页面:http://flume.apache.org/download.html 1.7.0下载地址:http:// ...
- C# 随机数生成避免重复
public string GetMsgID() { Random rand = new Random((int)DateTime.Now.Ticks); string szRand = rand.N ...
- centos7 firewall 操作
一.firewall配置 The configuration for firewalld is stored in various XML files in /usr/lib/firewalld/ a ...
- 由angular命令行工具(angular-cli)生成的目录和文件
e2e目录:是端到端的测试目录,包含基本的测试桩.是用来做自动测试的. src:应用源代码目录.我们写的所有代码都应该在这里面. app:包括应用的组件和模块.我们自己写的绝大部分代码都是写在这个目录 ...
- centos双机热备份
centos双机热备份 本机没有用到F5硬件,用到的是radware. 现在有2台服务器:192.168.2.66, 192.168.2.67 有一个公网ip:xxx.xxx.xx.203 将67上冷 ...
- 设计模式--单例模式C++实现
单例模式C++实现 1描述: 单例模式,又称单件模式. 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 2具体类图描述: 2.1 StartUML内部生成模式类图 该类图由S ...
- flask学习(十一):if判断语句
1. 语法: {% if xxx %} {% else %} {% endif %} 2. if的使用,和python中if相差无几 用if判断,当用户名存在且年龄大于18时,才显示用户名和注销
- Regression 手动实现Gradient Descent
import numpy as np import matplotlib.pyplot as plt x_data = [338.,333.,328.,207.,226.,25.,179.,60.,2 ...
- h5开发中,利用微信或者QQ登陆以后获取用户头像在canvas画布显示问题
在实际开发上先的h5页面产品中,总会遇到各种坑,好多坑都是安卓和iPhone端兼容的问题(用电脑谷歌浏览器输入 chrome://inspect/#devices可以用手机USB调试,打开) eg: ...