一键锁屏,激活设备管理器,卸载应用,清除数据
2016-01-08 08:37
253 查看
开发一个设备管理器
参考文档:http://wear.techbrood.com/guide/topics/admin/device-admin.html
Caused by: java.lang.SecurityException: No active admin owned by uid 10047 for policy #3
安全异常,没有激活设备管理器。
解决这种方法,有两种:
第一种,在真机或者模拟器中手机激活:
设置-->安全-->设备管理器-->点击设备管理,进行激活。
然后运行程序,成功实现了一键锁屏功能。但是这种方法不推荐,因为用户有可能不知道怎么激活设备管理器,这样的话,用户的体验效果不好。
第二种,通过代码实现:
activity_main.xml
虽然实现了一键锁屏的功能,但是用户如果不想再用这个app了,想要卸载的时候(在用户管理器已经激活的情况下),却出现了这种情况,卸载不了。
卸载这种应用的方法,也有两种:
方法一:取消设备管理器的激活
方法二:用代码实现
activity_main.xml
参考文档:http://wear.techbrood.com/guide/topics/admin/device-admin.html
一键锁屏 & 激活设备管理器功能:
AdminReceiver.javapackage com.example.lockscreen; import android.app.admin.DeviceAdminReceiver; public class AdminReceiver extends DeviceAdminReceiver { }在清单文件中配置:
<receiver android:name="com.example.lockscreen.AdminReceiver" android:description="@string/sample_device_admin_description" android:label="@string/sample_device_admin" 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>res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">一键锁屏</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="sample_device_admin_description">设备管理描述</string> <string name="sample_device_admin">设备管理</string> </resources>res/xml/device_admin_sample.xml
<?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 /> <expire-password /> <encrypted-storage /> <disable-camera /> </uses-policies> </device-admin>activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="lockScreen" android:text="一键锁屏" /> </LinearLayout>MainActivity.java
package com.example.lockscreen; import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { private DevicePolicyManager mDPM; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);//获取设备策略服务 } public void lockScreen(View view){ mDPM.lockNow();//立即锁屏 } }运行程序,发现程序崩溃了,报错信息如下:
Caused by: java.lang.SecurityException: No active admin owned by uid 10047 for policy #3
安全异常,没有激活设备管理器。
解决这种方法,有两种:
第一种,在真机或者模拟器中手机激活:
设置-->安全-->设备管理器-->点击设备管理,进行激活。
然后运行程序,成功实现了一键锁屏功能。但是这种方法不推荐,因为用户有可能不知道怎么激活设备管理器,这样的话,用户的体验效果不好。
第二种,通过代码实现:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="activeAdmin" android:text="激活设备管理器" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="lockScreen" android:text="一键锁屏" /> </LinearLayout>MainActivity.java
package com.example.lockscreen; import android.app.Activity; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { private DevicePolicyManager mDPM; private ComponentName mDeviceAdminSample; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);// 获取设备策略服务 mDeviceAdminSample = new ComponentName(this, AdminReceiver.class); } /** 激活设备管理器 */ public void activeAdmin(View view) { Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "我们有了超级设备管理器,好NB"); startActivity(intent); } /** 一键锁屏 */ public void lockScreen(View view) { if(mDPM.isAdminActive(mDeviceAdminSample)){ //判断设备管理器是否已经激活 mDPM.lockNow();//立即锁屏 mDPM.resetPassword("123456", 0);//设置密码 }else{ Toast.makeText(this, "必须先激活设备管理器!", 0).show(); } } }运行效果图:
虽然实现了一键锁屏的功能,但是用户如果不想再用这个app了,想要卸载的时候(在用户管理器已经激活的情况下),却出现了这种情况,卸载不了。
卸载这种应用的方法,也有两种:
方法一:取消设备管理器的激活
方法二:用代码实现
卸载应用
参考源码:activity_main.xml
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="unInstall" android:text="卸载应用" />MainActivity.java
/**卸载应用*/ public void unInstall(View view){ mDPM.removeActiveAdmin(mDeviceAdminSample);//取消激活 //卸载程序 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:"+getPackageName())); startActivity(intent); }
清除数据
MainActivity.java/**清除数据*/ public void clearData(View view){ if(mDPM.isAdminActive(mDeviceAdminSample)){//判断设备管理器是否已经激活 mDPM.wipeData(0);//清除数据,恢复出厂设置 }else{ Toast.makeText(this, "必须先激活设备管理器!", 0).show(); } }
相关文章推荐
- python学习之html从0开始(一)
- Linux系统下mysql的安装
- UVa12063 Zeros and Ones
- WeChat demo 麦子学院课程笔记 XMPP部分
- maven eclipse
- 我与nginx的初次见面
- Linux SSH安装与测试
- 2016-01-07 工作笔记7
- MFC CString to char* (Visual Studio 2015 亲测可用)
- 文字颜色渐变特效
- 黑客们成功地在土豆上安装了 Linux !
- 2016.1.7
- 加密解密技术基础以及公钥基础设施(PKI)
- Scalaz(24)- 泛函数据结构: Tree-数据游览及维护
- Scalaz(24)- 泛函数据结构: Tree-数据游览及维护
- 『原创』统计建模与R软件-第六章 回归分析
- 北京Uber优步司机奖励政策(1月8日)
- 2016-01-06 工作笔记6
- 2165: 大楼 倍增floyd
- 130_Bribe the Prisoners 囚徒贿赂问题 (2009 Round1C C)