Android进行设备管理(针对企业开发)
来源:互联网 发布:php短信接口 编辑:程序博客网 时间:2024/04/28 12:37
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 {@Overridepublic DevicePolicyManager getManager(Context context) {return super.getManager(context);}@Overridepublic ComponentName getWho(Context context) {return super.getWho(context);}/** * 禁用 */@Overridepublic void onDisabled(Context context, Intent intent) {Toast.makeText(context, "禁用设备管理", Toast.LENGTH_SHORT).show();super.onDisabled(context, intent);}@Overridepublic CharSequence onDisableRequested(Context context, Intent intent) {return super.onDisableRequested(context, intent);}/** * 激活 */@Overridepublic void onEnabled(Context context, Intent intent) {Toast.makeText(context, "启动设备管理", Toast.LENGTH_SHORT).show();super.onEnabled(context, intent);}@Overridepublic void onPasswordChanged(Context context, Intent intent) {super.onPasswordChanged(context, intent);}@Overridepublic void onPasswordFailed(Context context, Intent intent) {super.onPasswordFailed(context, intent);}@Overridepublic void onPasswordSucceeded(Context context, Intent intent) {super.onPasswordSucceeded(context, intent);}@Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);}@Overridepublic 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)方法来知晓用户的选择
@Overrideprotected 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
- Android进行设备管理(针对企业开发)
- Android进行设备管理(针对企业开发)
- 针对用户进行开发
- 企业移动设备管理方案
- jsp企业设备管理系统
- 企业 Apple 设备管理概述
- Android 设备管理
- Android设备管理
- C#针对Android开发
- android 针对webView开发
- Android 针对WebView开发
- Android 针对WebView开发
- Android 针对WebView开发
- 如何针对iOS 7进行开发?
- 设备管理软件、企业设备管理系统、设备维修的管理
- Android 锁屏(设备管理)
- Android StorageManager 存储设备管理
- android 设备管理介绍
- spring cloud 1:Spring Cloud和dubbo对比
- 求二分图最大匹配的两种算法
- Web移动端设备适配
- 清除浮动
- nohup命令在linux系统,控制jar包后台运行
- Android进行设备管理(针对企业开发)
- android自定义字体
- Spring对于赋值Xml赋值方式
- latex的参考文献
- 最全的国内外IT学习网站和工具(自己总结的)
- 最近对问题
- 1
- <poj-2996>Help Me with the Game
- 2