功能:单击按钮实现锁屏功能,可以根据文档来:Administration->Device Policies
需要手动去打开管理员权限,否则会报安全异常的错误,不过也可以用代码打开管理员权限,但是会弹出激活提示,需要用户去激活
手动打开管理员权限的位置为:手机设置-->安全--> :下图勾选的文字为代码中写的
代码如下:
主活动:
public class MainActivity extends Activity {
/**
* 设备策略管理者
*/
private DevicePolicyManager deviceManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//得到管理者对象
deviceManager=(DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
}
/**
* 按钮单击事件,实现代码打开管理员权限,会弹出界面需要用户点击激活
*/
public void openAdmin(View v){
//开启管理员权限
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
ComponentName mDeviceAdminSample=new ComponentName(this, MyPolicies.class);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"提示语,需要打开管理员权限实现一键锁屏");
startActivity(intent);
}
/**
*按钮单击事件,实现锁屏以及加密功能
*/
public void lockscreen(View v){
ComponentName mDeviceAdminSample=new ComponentName(this, MyPolicies.class);
if(deviceManager.isAdminActive(mDeviceAdminSample)){//如果是管理员了
deviceManager.lockNow();//一键锁屏,按返回就可以亮屏
//加了这行代码,锁屏了解锁就需要密码了
deviceManager.resetPassword("123", 0);//重置密码为123
//deviceManager.resetPassword("", 0);//取消密码
//清楚sddata上的数据
//deviceManager.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);
//恢复出厂设置
//deviceManager.wipeData(0);
}else{
Toast.makeText(this, "管理员权限没有打开", 0).show();
}
}
/**
* 卸载当前软件的单击事件
* 很不幸的是如果不写这个方法实现卸载程序,该应用就卸载不了了,毕竟得到了管理员权限
*/
public void uninstall(View v){
//取消该应用的管理员权限
ComponentName mDeviceAdminSample=new ComponentName(this, MyPolicies.class);
deviceManager.removeActiveAdmin(mDeviceAdminSample);
//普通程序的卸载
Intent intent=new Intent();
intent.setAction("android.intent.action.DELETE");
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse("package:"+getPackageName()));
startActivity(intent);
}
}
广播接收者:MyPolicies.java 只需要继承就行,因为注册文件中需要用到
/**
* 实现一键锁屏的步骤:
* 1.定义一个类继承设备管理的广播接受者,DeviceAdminReceiver继承了BroadcastReceiver
* 2.在清单文件中进行注册服务,已经一些额外数据
* 3.在res/xml文件夹下创建一个xml文件,指定拥有的功能
* 4.得到管理员对象,调用锁屏方法
*/
public class MyPolicies extends DeviceAdminReceiver {
}
清单文件:
<!-- 根据文档来的:Administration->Device Policies -->
<receiver android:name="com.example.yjsp.MyPolicies"
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>
上面用到的字符串: 也是激活管理器权限后显示的文字
<string name="sample_device_admin">设置管理员权限标签</string>
<string name="sample_device_admin_description">用户管理员的描述信息</string>
定义管理员的权限功能:res/ xml/ device_admin_sample.xml
<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 />
</uses-policies>
</device-admin>