对button进行事件监听:按下就会将该应用注册为设备管理器并禁用设备camera;
View.OnClickListener mOnClickListener = new View.OnClickListener(){
boolean firstin = true ;
@Override
public void onClick(View view){
if (firstin) {
//添加一个隐式意图,完成设备权限的添加
//这个Intent (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)跳转到 权限提醒页面
//并传递了两个参数EXTRA_DEVICE_ADMIN 、 EXTRA_ADD_EXPLANATION
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//权限列表
//EXTRA_DEVICE_ADMIN参数中说明了用到哪些权限,
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
//描述(additional explanation)
//EXTRA_ADD_EXPLANATION参数为附加的说明
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "something like title");
startActivityForResult(intent, 0);
firstin = false ;
}
boolean active = dpm.isAdminActive(componentName);
if (active) {
dpm.setCameraDisabled(componentName,true);
dpm.setStorageEncryption(componentName,false);
}
}
};
监听设备管理器状态类——AdminReceiver.java
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public DevicePolicyManager getManager(Context context) {
Log.i("zy", "调用了getManager()方法");
return super.getManager(context);
}
@Override
public ComponentName getWho(Context context) {
Log.i("zy", "调用了getWho()方法");
return super.getWho(context);
}
/**
* 禁用
*/
@Override
public void onDisabled(Context context, Intent intent) {
FullscreenActivity.lockit();
Log.i("zy", "调用了onDisabled()方法");
Toast.makeText(context, "禁用设备管理", Toast.LENGTH_SHORT).show();
super.onDisabled(context, intent);
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
Log.i("zy", "调用了onDisableRequested()方法");
return super.onDisableRequested(context, intent);
}
/**
* 激活
*/
@Override
public void onEnabled(Context context, Intent intent) {
Log.i("zy", "调用了onEnabled()方法");
Toast.makeText(context, "启动设备管理", Toast.LENGTH_SHORT).show();
super.onEnabled(context, intent);
}
@Override
public void onPasswordChanged(Context context, Intent intent) {
Log.i("zy", "调用了onPasswordChanged()方法");
super.onPasswordChanged(context, intent);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
Log.i("zy", "调用了onPasswordFailed()方法");
super.onPasswordFailed(context, intent);
}
@Override
public void onPasswordSucceeded(Context context, Intent intent) {
Log.i("zy", "调用了onPasswordSucceeded()方法");
super.onPasswordSucceeded(context, intent);
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i("zy", "调用了onReceive()方法");
super.onReceive(context, intent);
}
@Override
public IBinder peekService(Context myContext, Intent service) {
Log.i("zy", "调用了peekService()方法");
return super.peekService(myContext, service);
}
public static void lockit(){
dpm.resetPassword("123456",DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
dpm.lockNow();
}
}
加上过程中用到的权限的metadata和修改manifest
<receiver
android:name=".BoradcastReceiver.AdminReceiver"
android:description="@string/app_name"
android:label="TestReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN"
>
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/lockourscreen"/>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
配置权限文件lockourscreen.xml
<?xml version="1.0" encoding="UTF-8"?>
<device-admin
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock />
<wipe-data />
<reset-password />
<limit-password />
<watch-login />
<disable-camera />
<encrypted-storage/>
</uses-policies>
</device-admin>