关于手机防盗的功能,前面我们已经完成了一半,今天将要完成另一半,我们先来看看整体的功能描述:
现在,我们还差两个功能:
- 远程删除数据
- 远程锁屏
需要说明一下,完成今天的任务,你就可以开发一款 App:一键锁屏,是不是很厉害,哈哈。
- Android 项目:手机安全卫士(3)—— 主界面布局
- Android 项目:手机安全卫士(4)—— 自定义(组合)控件、属性
- Android 项目:手机安全卫士(5)—— 自定义弹窗
- Android 项目:手机安全卫士(6)—— 手机防盗设置向导
- Android 项目:手机安全卫士(6)—— 手机防盗设置向导(二)
- Android 项目:手机安全卫士(7)—— 手机防盗功能
项目源码地址(实时更新):https://github.com/xwdoor/MobileSafe
2 管理员权限
不管是远程删除数据,还是远程锁屏,都需要系统的管理员权限,既然如此,那让我们先来看看怎么获取管理员权限。 首先,创建一个 Receiver:AdminReceiver,继承自 DeviceAdminReceiver,看清楚哦,不是继承自 BroadcastReceiver:
/** * Created by XWdoor on 2016/3/9 009 10:03. * 博客:http://blog.csdn.net/xwdoor */ public class AdminReceiver extends DeviceAdminReceiver { }
这个 Receiver 什么都不做,只是一个傀儡,重点在于它在清单文件 AndroidManifest.xml 中进行注册时的配置,如下所示:
需要注意几点,需要配置一个权限属性:android:permission="android.permission.BIND_DEVICE_ADMIN",除此之外,我们还需要设置它的配置数据,标明我们将需要那些操作,在这里,我们创建一个 xml 配置文件:device_admin.xml,内容如下:
除了这两个权限之外,其实还有其他很多的权限,如设置锁频密码、禁用摄像头、加密存储卡 等策略,这里我们只用到两个。好了,这些准备工作做完,我们就可以获取并激活管理员权限了。
3 激活管理员权限
配置好参数之后,就需要在代码中提示用户激活权限了,首先在 BaseActivity 中初始化设备管理器:
// 设备策略管理器 mDPM = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); // 初始化管理员组件 mDeviceCompOnentName= new ComponentName(this, AdminReceiver.class);
然后添加激活管理员权限的方法,如下:
/** * 激活超级管理员权限 设置->安全->设备管理器 */ public void activeAdmin() { Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceComponentName); intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "手机安全卫士-手机防盗,您的好帮手,值得拥有"); startActivity(intent); showToast("请先激活手机防盗的管理员权限"); }
然后在手机防盗界面 AntiTheftActivity,添加判断,并提示用户激活:
//如果没有激活权限,提示激活 if(!mDPM.isAdminActive(mDeviceComponentName)){ activeAdmin(); }
4 远程锁屏
有了上面的准备,锁屏就简单了,直接调用锁屏的 api 即可:
else if ("#*lockscreen*#".equals(msg)) { //远程锁屏 lockNow(context); abortBroadcast(); } /** * 立即锁屏 */ public void lockNow(Context context) { // 设备策略管理器 DevicePolicyManager mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); // 初始化管理员组件 ComponentName mDeviceCompOnentName= new ComponentName(context, AdminReceiver.class); if (mDPM.isAdminActive(mDeviceComponentName)) { mDPM.lockNow();// 立即锁屏 //mDPM.resetPassword("123456", 0);// 重新设置密码, 传""取消密码 } }
5 删除数据
同样,也是调用 api 即可
else if ("#*wipedata*#".equals(msg)) { //删除数据 wipeData(context); abortBroadcast(); } /** * 清除数据 */ public void wipeData(Context context) { // 设备策略管理器 DevicePolicyManager mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); // 初始化管理员组件 ComponentName mDeviceCompOnentName= new ComponentName(context, AdminReceiver.class); if (mDPM.isAdminActive(mDeviceComponentName)) { mDPM.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);// 清除内部数据和sdcard } }
6 总结
今天的内容是干货有木有,可以做一键锁屏了,可以设置锁频密码、禁用摄像头、加密存储卡了,很兴奋吧。
最近的学习强度增加了,是因为需要抽出时间做其他事,所以节奏加快了。
- Android 项目:手机安全卫士(3)—— 主界面布局
- Android 项目:手机安全卫士(4)—— 自定义(组合)控件、属性
- Android 项目:手机安全卫士(5)—— 自定义弹窗
- Android 项目:手机安全卫士(6)—— 手机防盗设置向导
- Android 项目:手机安全卫士(6)—— 手机防盗设置向导(二)
- Android 项目:手机安全卫士(7)—— 手机防盗功能
项目源码地址(实时更新):https://github.com/xwdoor/MobileSafe