获取系统设备管理器的方法
1.新建一个类继承DeviceAdminReceiver
public class AdminReceiver extends DeviceAdminReceiver {
}
2.AndroidManifest中注册
<receiver android:name=".receiver.AdminReceiver"
android:label="@string/sample_device_admin"
android:description="@string/sample_device_admin_description"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data android:name="android.app.device_admin"
android:resource="@xml/device_admin_sample" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
</intent-filter>
</receiver>
3.获取设备管理器和设备管理组件
//获取设备管理器
DevicePolicyManager mDPM= (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
//获取设备管理组件
ComponentName mDeviceAdminSample= new ComponentName(context,AdminReceiver.class);
4.使用方法
a 锁屏
mDPM.lockNow();//立即锁屏
a_2 锁屏并设置解锁密码
//重新设置解锁密码,并不允许有其他的设备管理器
mDPM.resetPassword("12345",0);
b 清除数据,恢复出厂设置
mDPM.wipeData(0);//清除数据,恢复出场设置
5设备管理器使用的时候需要去在android手机设备管理器中激活
所以为了用户体验的优秀当设备管理器没有激活的时候设置一个弹窗
这里使用SnackBar
首先添加引用
C:\Users\admin\AndroidStudioProjects\NewGoal\app\build.gradle
compile 'com.android.support:design:23.1.1'
然后就可以直接使用了
Snackbar.make(llLost, "请选择激活软件!", Snackbar.LENGTH_LONG)
.setAction("激活", new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"哈哈哈哈,我们有了超级设备管理器,好牛逼!");
startActivity(intent);
}
}).setActionTextColor(Color.WHITE).show();
这里有一点 SnackBar的第一个参数需要是一个view 这里的llLost就是当前界面布局
所以需要初始化得到
llLost= (LinearLayout) findViewById(R.id.ll_lost);
上方红色字体可以直接进入设备管理器激活界面然后进行激活
对弈设备管理器是否已经激活的判断如下
在获取到设备管理器和设备管理组件分别为mDPM和mDeviceAdminSample后,判断代码如下
if(!mDPM.isAdminActive(mDeviceAdminSample)){
}//如果此设备管理器没有被激活
设备管理器可以完成很多功能
卸载软件
/*
卸载
*/
public void godie(View view){
mDPM.removeActiveAdmin(mDeviceAdminSample);
//激活设备管理器的软件在设备管理器没有取消激活的情况下是无法被卸载的
//所以这里在卸载之前需要将设备管理器取消激活
//卸载程序
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DELETE);
intent.setData(Uri.parse("package:"+getPackageName()));
startActivity(intent);
}
一个完整的恢复出厂设置的demo
/*
清除数据,并恢复出厂设置
*/
public void clear(View view){
if(mDPM.isAdminActive(mDeviceAdminSample)){
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setIcon(R.drawable.ic_launcher);
builder.setMessage("点击确定您将清除数据,并恢复出场设置!");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mDPM.wipeData(0);//清除数据,恢复出场设置
}
});
builder.setNegativeButton("取消",null);
builder.show();
}else{
Snackbar.make(view, "请选择激活软件!", Snackbar.LENGTH_LONG)
.setAction("激活", new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"哈哈哈哈,我们有了超级设备管理器,好牛逼!");
startActivity(intent);
}
}).setActionTextColor(Color.WHITE).show();
}