[Android学习笔记七] 设备管理服务示例开发
关于Android Device Administratioin介绍可参见文档docs/guide/topics/admin/device-admin.html 小节。
本文通过示例演示Android Device Policy管理的实现。
1.示例基本操作图
上图是本示例的主界面,通过应用程序来实现设备管理,本示例实现密码设置管理。
1.1 通过点击“启动设备管理器”按钮来激活设备管理
应用程序用通知设备管理启用,用户点击激活,应用程序具备设备管理能力。
1.2 通过点击“设置密码规则”按钮来设置锁屏密码的限制规则,要使用该策略需要在设备管理的使用策略列表中添加limit-password.
示例中调用了设置新密码的ACTION(DevicePolicyManager.ACTION_SET_NEW_PASSWORD),通过设置后,看以看到屏幕锁屏需要密码。
1.3 通过点击“修改密码”按钮则可以将文本框中的内容作为锁屏密码,该步骤可以通过程序完成。
调用DevicePolicyManager的重置密码方法(resetPassword),即可在应用程序中对锁屏密码进行重置。
2. 具体实现
实现上述整个示例需要:
a.界面布局;实际应用中根据具体情况而定
b.DevicePolicyManager类的具体使用
c.DeviceAdminReceiver类的子类话,来实现具体广播事件的处理
d.AndroidManifest.xml文件中广播接收类的配置
c.应用程序中需要的设备管理策略列表
注:本示例代码使用了Butterknife框架。
2.1 示例程序界面(layout/activity_device_admin.xml)
<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#f7f1f1"android:orientation="vertical"android:padding="15dp"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:orientation="horizontal"><EditTextandroid:id="@+id/pwd_editText"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_margin="10dp"android:layout_weight="3"android:hint="6位数字"android:textColor="@android:color/black"/><Buttonandroid:id="@+id/modify_pwd_button"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_margin="10dp"android:layout_weight="1.5"android:text="修改密码"/></LinearLayout><Buttonandroid:id="@+id/pwd_rule_set_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="设置密码规则"/><Buttonandroid:id="@+id/device_admin_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="启用设备管理"/></LinearLayout>
2.2 Activity类和自定义的DeviceAdminReceiver类
packagesecondriver.sdk.activity;importandroid.app.Activity;importandroid.app.admin.DeviceAdminReceiver;importandroid.app.admin.DevicePolicyManager;importandroid.content.ComponentName;importandroid.content.Context;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;importbutterknife.Bind;importbutterknife.ButterKnife;importbutterknife.OnClick;importsecondriver.sdk.R;/***Author:secondriver*Created:2015/11/27*/publicclassDeviceAdminActivityextendsActivity{@Bind(R.id.pwd_editText)publicEditTextpwdEditText;privateDevicePolicyManagermDevicePolicyManager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_device_admin);ButterKnife.bind(this);mDevicePolicyManager=(DevicePolicyManager)getSystemService(DEVICE_POLICY_SERVICE);}//单击启用设备管理按钮@OnClick(R.id.device_admin_button)publicvoidonClickDeviceButton(Buttonbutton){Intentintent=newIntent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,newComponentName(this,MyDeviceAdminReceiver.class));intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"启动设备管理器");startActivityForResult(intent,1);}//单击设置密码规则按钮@OnClick(R.id.pwd_rule_set_button)publicvoidonClickPwdRuleSetButton(Buttonbutton){Intentintent=newIntent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);startActivityForResult(intent,2);}//单击修改密码按钮@OnClick(R.id.modify_pwd_button)publicvoidonClickModifyPwdButton(Buttonbutton){Stringpwd=pwdEditText.getText().toString();ComponentNamereceiver=newComponentName(this,MyDeviceAdminReceiver.class);booleanactive=mDevicePolicyManager.isAdminActive(receiver);if(active){booleanrs=mDevicePolicyManager.resetPassword(pwd,DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);if(rs){Toast.makeText(this,"密码修改成功",Toast.LENGTH_SHORT).show();}else{Toast.makeText(this,"密码修改失败",Toast.LENGTH_SHORT).show();}}else{Toast.makeText(this,"没有ActiveAdmin",Toast.LENGTH_SHORT).show();}}@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){switch(requestCode){case1:if(resultCode==RESULT_OK){Toast.makeText(this,"设备管理器开启成功",Toast.LENGTH_SHORT).show();}else{Toast.makeText(this,"设备管理器开启失败",Toast.LENGTH_SHORT).show();}break;case2:if(resultCode==RESULT_OK){Toast.makeText(this,"密码规则设置成功",Toast.LENGTH_SHORT).show();}else{Toast.makeText(this,"密码规则设置失败",Toast.LENGTH_SHORT).show();}break;default:break;}}//自定义的设备管理广播接收类,可以重写DeviceAdminReceiver中的方法,来实现具体功能publicstaticclassMyDeviceAdminReceiverextendsDeviceAdminReceiver{/***重写其中方法*<p>*More*/@OverridepublicvoidonDisabled(Contextcontext,Intentintent){super.onDisabled(context,intent);//设备管理禁用}@OverridepublicvoidonEnabled(Contextcontext,Intentintent){super.onEnabled(context,intent);//设备管理启用}}}
2.3 配置设备管理接收者
<activityandroid:name=".activity.DeviceAdminActivity"/><receiverandroid:name=".activity.DeviceAdminActivity$MyDeviceAdminReceiver"android:permission="android.permission.BIND_DEVICE_ADMIN"><meta-dataandroid:name="android.app.device_admin"android:resource="@xml/device_admin"/><intent-filter><actionandroid:name="android.app.action.DEVICE_ADMIN_ENABLED"/></intent-filter></receiver>
xml/device_admin内容:
<?xmlversion="1.0"encoding="utf-8"?><device-adminxmlns:android="http://schemas.android.com/apk/res/android"><uses-policies><!--设置密码规则;控制屏幕锁的密码长度和允许的字符--><limit-password/><!--监视屏幕锁解锁尝试的次数;如果输入错误次数过多则锁定手机或者清除所有数据--><watch-login/><!--重置屏幕锁的密码;重新设置新的屏幕锁密码--><reset-password/><!--强制锁屏;控制屏幕锁屏的方式和时间--><force-lock/><!--擦除数据;恢复出厂设置清除说有数据--><wipe-data/><!--禁用相机;禁止使用所有设备摄像头--><disable-camera/><!--加密数据;对存储的应用数据进行加密--><encrypted-storage/><!--密码过期;强制用户更改屏幕锁密码的频率--><expire-password/></uses-policies></device-admin>
示例生成apk,该应用具体了设备管理的功能。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。