一键锁屏与重置密码,清除数据,管理员权限
功能:单击按钮实现锁屏功能,可以根据文档来: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>