Android进行设备管理(针对企业开发)

标签: android 设备 管理 | 发表时间:2013-05-23 19:53 | 作者:Tibib
出处:http://blog.csdn.net


设备管理

Android从2.2版本开始,提供了一套设备管理API来进行Android手机设备的管理工作,其中包含设备锁屏、禁用启用摄像头(4.0开始提供)、擦除用户数据(也可擦除sdcard中的数据,不过要到2.3)等一系列的设备管理策略,具体可参见DevicePolicyManager类中的定义( http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html),下面是一些具体的步骤~


声明和定义策略

在使用设备管理功能前需在 res/xml/device_admin.xml 中声明和定义要使用的设备策略,这些声明和定义的策略将会被我们的应用程序执行,如果你执行了没在  res/xml/device_admin.xml  声明和定义的策略,那将会抛出   SecurityException  异常,具体定义如下

<device-admin xmlns:android="http://schemas.android.com/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>

接收设备管理中一些事件

在进行设备管理的操作中,根据具体的业务逻辑可能需要知晓一些重要事件,比如取消激活设备管理事件,这个事件就很重要了,我们必须得知道用户进行了此项操作,从而来进行一些逻辑的处理或者提示用户,还有许多的事件这里就不一一说了,具体详见DeviceAdminReceiver( http://developer.android.com/training/enterprise/device-management-policy.html#CreateDeviceAdminReceiver),我们可以继承DeviceAdminReceiver,覆写一些回调方法,具体可能如下

public class AdminReceiver extends DeviceAdminReceiver {
	
	@Override
	public DevicePolicyManager getManager(Context context) {
		return super.getManager(context);
	}
	
	@Override
	public ComponentName getWho(Context context) {
		return super.getWho(context);
	}
	
	/**
	 * 禁用
	 */
	@Override
	public void onDisabled(Context context, Intent intent) {
		
		Toast.makeText(context, "禁用设备管理", Toast.LENGTH_SHORT).show();
		
		super.onDisabled(context, intent);
	}
	@Override
	public CharSequence onDisableRequested(Context context, Intent intent) {
		return super.onDisableRequested(context, intent);
	}
	
	/**
	 * 激活
	 */
	@Override
	public void onEnabled(Context context, Intent intent) {
		
		Toast.makeText(context, "启动设备管理", Toast.LENGTH_SHORT).show();
		
		super.onEnabled(context, intent);
	}
	@Override
	public void onPasswordChanged(Context context, Intent intent) {
		super.onPasswordChanged(context, intent);
	}
	@Override
	public void onPasswordFailed(Context context, Intent intent) {
		super.onPasswordFailed(context, intent);
	}
	@Override
	public void onPasswordSucceeded(Context context, Intent intent) {
		super.onPasswordSucceeded(context, intent);
	}
	@Override
	public void onReceive(Context context, Intent intent) {
		super.onReceive(context, intent);
	}
	@Override
	public IBinder peekService(Context myContext, Intent service) {
		//Logger.d("------" + "peekService" + "------");
		return super.peekService(myContext, service);
	}
	
}
当然还需像正常的Receiver一样得在Manifest文件中进行注册,还行注意的是在注册过程中还需引用我们刚才声明定义好的策略列表

        <receiver
            android:name=".receiver.AdminReceiver"
            android:description="@string/device_des"
            android:label="@string/device_label"
            android:permission="android.permission.BIND_DEVICE_ADMIN" >
            <meta-data
                android:name="android.app.device_admin"
                android:resource="@xml/device_manager" />

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

激活设备管理员

在策略执行之前,我们必须让我们的应用成为设备管理员,这样权限去执行一些设备管理的策略,因为设备管理涉及到一些对设备或用户数据的操作,所以这一步骤必须得让用户知道,让用户来选择,我们不能在后台默默的做这一件事,不过个人认为这也不是一项很好的操作,很多用户就算给他提示了,把选择权让给他了,也不会明其理,这可能会导致一些不法应用做一些恶心的破坏(直接把sdcard中所有的数据都清除)

	private void setDeviceManager() {
		//获取设备管理服务  
        mPolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);  
        
        //AdminReceiver 继承自 DeviceAdminReceiver  
		mPlcManagerCn = new ComponentName(this, AdminReceiver.class);
        if(!mPolicyManager.isAdminActive(mPlcManagerCn)){
        	activeAdminManager(mPlcManagerCn);
        }
	}

	/**
	 * 激活设备管理器
	 */
	private void activeAdminManager(ComponentName cn){
		
        // 启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器  
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);  
          
        //权限列表  
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, cn);  
          
        //描述(additional explanation)  
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, getString(R.string.device_des));  
        
        startActivityForResult(intent, 100);
	}

执行到这里后会弹出如下界面让用户选择是否激活设备管理员


我们可以通过覆写onActivityResult(int requestCode, int resultCode, Intent data)方法来知晓用户的选择

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		Log.i("INFO", "requestCode : " + requestCode + "   resultCode:"+resultCode );
	}

当用户选择了Activate时,我们就可以来执行声明定义好的策略了,在这里只介绍下擦除数据策略的使用

mPolicyManager.wipeData(0);

wipeData()方法只接收0和  WIPE_EXTERNAL_STORAGE ,当为0时代表只清除用户数据(你手机中应用存储的所有数据,但不会卸载掉),当为  WIPE_EXTERNAL_STORAGE  时会连带sdcard中的数据也会清除掉,这一点需要特别的注意


最后需要注意的是,设备管理API是在2.2之后陆续加入的,所以在具体的应用中还需对设备操作系统的版本进行判断,看看是否支持该策略。在所有的策略中密码策略是最为复杂也最为完善。如果想学习更多,大家可以到 http://developer.android.com/training/enterprise/device-management-policy.html#CreateDeviceAdminReceiver了解基本 操作和 http://developer.android.com/guide/topics/admin/device-admin.html中有更详细的介绍


参考文章: http://developer.android.com/training/enterprise/device-management-policy.html#CreateDeviceAdminReceiver

http://developer.android.com/guide/topics/admin/device-admin.html





作者:Tibib 发表于2013-5-23 19:53:09 原文链接
阅读:0 评论:0 查看评论

相关 [android 设备 管理] 推荐:

Android进行设备管理(针对企业开发)

- - CSDN博客推荐文章
在使用设备管理功能前需在 res/xml/device_admin.xml 中声明和定义要使用的设备策略,这些声明和定义的策略将会被我们的应用程序执行,如果你执行了没在  res/xml/device_admin.xml  声明和定义的策略,那将会抛出  . SecurityException  异常,具体定义如下.

Google Glass 企业版第二代发布,支持 Android 移动设备管理

- - 好奇心日报
Google Glass 研发又有了新进展,周一 Google 发布了第二代企业版智能眼镜(Google Glass Enterprise Edition 2),售价为 999 美元. Google Glass 最早于 2013 年推出,当时面向普通消费者. 它利用微型投影仪将计算机生成的图像发送到用户眼中,图像看起来像是浮动在现实世界之中.

Android内存管理

- - CSDN博客推荐文章
首先Android内存管理机制相当复杂,想要讲清楚比较困难;其次对于绝大多数用户来说,只关心内存够不够用,至于内存如何管理的这种技术细节,不是用户需要去考虑的,写这样一个专题有没有意义. 毕竟我们是用手机,不是来研究手机的. 最后的顾虑是这个专题会不会太技术化了,绝大部分用户不会看或者说缺乏相应的背景.

Android内存管理之道

- - CSDN博客移动开发推荐文章
相信一步步走过来的Android从业者,每个人都会遇到OOM的情况. 如何避免和防范OOM的出现,对于每一个程序员来说确实是一门必不可少的能力. 今天我们就谈谈在Android平台下内存的管理之道,开始今天的主题之前,先再次回顾两个概念. 内存泄漏:对象在内存heap堆中中分配的空间,当不再使用或没有引用指向的情况下,仍不能被GC正常回收的情况.

Android:管理应用内存

- - CSDN博客推荐文章
所有内容均来源于官方文档 https://developer.android.com/training/articles/memory.html. only way to completely release memory from your app is to release object references you may be holding, making the memory available to the garbage collector.

如何优雅地使用 Android 设备?

- - 知乎每日精选
本人长期使用安卓,也短期使用过itouch4,说说个人经验. 首先在 设备选择上,建议尽量选择Google的亲儿子. 1.因为安卓升级是很快的.每次升级的进步也是看得见的.这样能够享受到最新的Android系统. 2.省去清理各运营商的各种定制软件.绑定的软件. 3.省去行货机器恢复Google服务.

Google 发布 Android @ Home,让你用 Android 设备控制家电

- Kofai - 谷奥——探寻谷歌的奥秘
Google在考虑让你用Android设备控制家电,不过他们没明确说自己用什么方式让Android平板或手机跟家电通讯(因为你的灯泡不可能支持WiFi),他们只是说还在研究中,这个标准将是全新的,很省电的. 现场演示了用Android控制灯泡,甚至是在你玩游戏的时候随着打枪的时机,家里的电灯也会跟着一亮一灭.

连线:纯正Android已死 “Android兼容设备”大行其道

- - 爱活网最新资讯
摩托罗拉、HTC、三星....可以说,正是在Google和他的一群硬件小伙伴们共同努力下,Android才有了今天. 但是,即使是最忠实的Android拥护者,也不得不面对这样一个事实:Android阵营正在一天天分化、裂变. “开放”是Android赖以生存的一个关键词,但也正是由于开放,以及谷歌本身的管理不力,如今的Android生态系统正一天天碎片化.

Android必备电源管理软件

- iBeyond - Tech2IPO
相信很多使用Android手机用户都会有相同的烦恼:手机电池耗费太快,常常撑不过一天,上班不得不带跟USB线充电,一出门就担心电力不足……实际上,如果你连着Wifi或者3G网络,所有的桌面Widget,后台更新的程序,短信电话等等会让你的手机根本撑不过一个白天. 当然,你可以在电力紧缺的时候手动关闭3G、流量、GPS、杀掉所有程序……但不是每个人都有时间手动去做这些设置.

优秀的Android文件管理器

- Niclau - Solidot
Helen Swann 写道 "文件管理器是管理文件的软件,帮助用户处理日常工作,管理储存在本地和网络中的文件. 所有文件管理器都提供了基本的操作如创建、打开、查看、编辑、移动和删除文件. 许多Android文件管理器还提供了额外功能,如网络连接、应用程序管理、存档和压缩处理、搜索等. 这篇文章介绍了 10款Android文件管理器,供感兴趣的用户参考.