关于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)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns: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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:orientation="horizontal">
<EditText
android: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"/>
<Button
android: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>
<Button
android:id="@+id/pwd_rule_set_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="设置密码规则"/>
<Button
android:id="@+id/device_admin_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="启用设备管理"/>
</LinearLayout>
2.2 Activity类和自定义的DeviceAdminReceiver类
package secondriver.sdk.activity;
import android.app.Activity;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import secondriver.sdk.R;
/**
* Author : secondriver
* Created : 2015/11/27
*/
public class DeviceAdminActivity extends Activity {
@Bind(R.id.pwd_editText)
public EditText pwdEditText;
private DevicePolicyManager mDevicePolicyManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_device_admin);
ButterKnife.bind(this);
mDevicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
}
//单击启用设备管理按钮
@OnClick(R.id.device_admin_button)
public void onClickDeviceButton(Button button) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, new ComponentName(this, MyDeviceAdminReceiver.class));
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "启动设备管理器");
startActivityForResult(intent, 1);
}
//单击设置密码规则按钮
@OnClick(R.id.pwd_rule_set_button)
public void onClickPwdRuleSetButton(Button button) {
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivityForResult(intent, 2);
}
//单击修改密码按钮
@OnClick(R.id.modify_pwd_button)
public void onClickModifyPwdButton(Button button) {
String pwd = pwdEditText.getText().toString();
ComponentName receiver = new ComponentName(this, MyDeviceAdminReceiver.class);
boolean active = mDevicePolicyManager.isAdminActive(receiver);
if (active) {
boolean rs = 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, "没有Active Admin", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
Toast.makeText(this, "设备管理器开启成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "设备管理器开启失败", Toast.LENGTH_SHORT).show();
}
break;
case 2:
if (resultCode == RESULT_OK) {
Toast.makeText(this, "密码规则设置成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "密码规则设置失败", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
//自定义的设备管理广播接收类,可以重写DeviceAdminReceiver中的方法,来实现具体功能
public static class MyDeviceAdminReceiver extends DeviceAdminReceiver {
/**
* 重写其中方法
* <p>
* More
*/
@Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
//设备管理禁用
}
@Override
public void onEnabled(Context context, Intent intent) {
super.onEnabled(context, intent);
//设备管理启用
}
}
}
2.3 配置设备管理接收者
<activity android:name=".activity.DeviceAdminActivity"/>
<receiver android:name=".activity.DeviceAdminActivity$MyDeviceAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/device_admin"/>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
</intent-filter>
</receiver>
xml/device_admin内容:
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns: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,该应用具体了设备管理的功能。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。