Android一键锁屏APP
题记:
这个app完全是拾人牙慧,作为练手用的,其实没有什么原创的东西。当然,博客还是我自己写的,记录下来,对自己也算是一种成长吧。
转载请注明原文地址:
http://www.cnblogs.com/yanyojun/p/6479686.html
这篇博客很多部分参看了 http://blog.csdn.net/chencaishengsic/article/details/50765355
1、一键锁屏功能介绍
物理按键总是容易损坏的,在Android系统上,大家通常习惯按电源键来锁定屏幕;那有没有像IOS系统上悬浮按钮式的点击下锁定屏幕呢?下面实现这么一个功能。

上图中,有一个一键锁屏的应用图标,点击下,手机就可以锁定屏幕了。
2、源码
先创建一个继承自DeviceAdminReceiver的子类,这个只需要有一个实例就可以了,用来接收静态广播,里面不需要任何的逻辑实现,代码如下:
package com.plbear.qlock; import android.app.admin.DeviceAdminReceiver; /**
* Created by Yanyongjun on 2017/1/16.
*/ public class AdminManageReceiver extends DeviceAdminReceiver {
}
先建立一个Activity,在onCreate方法中获取DevicePolicyManager设备管理器实例。如下
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdminName = new ComponentName(this, AdminManageReceiver.class);
//获取设备管理器
DevicePolicyManager mDPM = (DevicePolicyManager) this.getSystemService(Context.DEVICE_POLICY_SERVICE);
//如果还没有激活设备管理器,则直接进入到设备管理器界面
if (!mDPM.isAdminActive(mAdminName)) {
showAdminManage();
}
//如果已经有了设备管理器的权限,则锁定屏幕
if (mDPM.isAdminActive(mAdminName)) {
mDPM.lockNow();
}
finish();
}
可以看到上面的Activity其实是非常简单的,并没有什么界面。
其中,showAdminManage方法这么去实现。
private void showAdminManage() {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,mAdminName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,R.string.app_name);
startActivityForResult(intent,-1);
}
走到这里大部分的业务逻辑已经实现了,但是其实还是不能工作的,有以下几个问题:
2.1 点击图标之后app出现闪烁下灭屏
这个app虽然没有前台界面,但是加载的时候还是会闪一下,这个时候需要在AndroidManifest.xml中定义下style就可以了,如下
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay" //将主题设置为NoDisplay之后就可以不闪烁了
android:excludeFromRecents="true"
>
2.2 设备管理器中怎么之后申请什么权限呢?
我们可以看到在设备管理器中申请权限的界面如下:

那设备管理器怎么之后要申请的是“锁屏”呢?
在AndroidManfiest.xml中这么写
<receiver
android:name=".AdminManageReceiver"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin">
</meta-data>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
如上面所示,这个静态广播中,定义一个
<meta-data>
</meta-data>
则设备管理器就会根据里面的name字段自动去查找resource字段,其中,device_admin.xml这么写:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock />
</uses-policies>
</device-admin>
这个地方申明下我需要申请的“锁屏”权限。
好了,按照上面就可以简单的实现了,源码可以看我的github:
https://github.com/YanYoJun/QLock
这里遗留一个有趣的问题,其实meta-data这个字段是很神奇的,后面有时间写一篇文章申请下。
3、设备管理器的使用
如果只是上面的内容,那这篇博客实在是乏善可陈,既然用到了设备管理器,那就顺带学习下设备管理器怎么使用吧。
设备管理器总的介绍见 https://developer.android.google.cn/guide/topics/admin/device-admin.html
DevicePolicyManager介绍见:https://developer.android.google.cn/reference/android/app/admin/DevicePolicyManager.html
DeviceAdminreceiver介绍见:https://developer.android.google.cn/reference/android/app/admin/DeviceAdminReceiver.html
总的来说,设备管理器主要可以来做以下七个方面的事情,为了形象,我们写 一个简单的测试apk来依次实现以下功能:
3.1 手机密码相关
3.2 锁屏
3.3 擦除数据
3.4 禁止相机使用
3.5 数据加密存储
3.6 提高其他app的签名权限
3.7 其他有用的api
4、为什么设备管理器会有这么强悍的功能?他是怎么实现的?
4、github路径
Android一键锁屏APP的更多相关文章
- Android一键锁屏源码
APK下载 源程序下载 锁屏流程如下(参考于Android一键锁屏开发全过程[源码][附图]) 源码参考于一键锁屏 源码 一共有2个Java文件: package com.example.onekey ...
- android DevicePolicyManager实现一键锁屏
本文章一部分资料来源于网上 1.实现一键锁屏关键是DevicePolicyManager这个类,然后使用lockNow():方法. 2.DevicePolicyManager类,可以让你的做软件获得系 ...
- Android简易实战教程--第六话《开发一键锁屏应用2·完成》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...
- Android Device Administration 设备管理器——实现一键锁屏
Android Device Administration 设备管理器--实现一键锁屏 最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊 ...
- Android简易实战教程--第五话《开发一键锁屏应用》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51860900 点击打开链接 Device Administration 对于这个应 ...
- 【WP 8.1开发】一键锁屏
在WP8的时候,关于如何关闭屏幕,国内外都有不少文章了,大家有兴趣地可以搜搜,很多,我就不给链接了,因为稍后我的例子中会有. 其实,关闭屏幕是调用了未开放的API,正因为这个API未开放的,不敢保证所 ...
- android开发 锁屏 真正的锁屏,是go锁屏那种。
想做个锁屏界面很久了,最近一周,历经千辛万苦,越过种种挫折,终于完美实现了这一要求,在此将锁屏思路分享出来. 注意:这不是什么一键锁屏,是类似“go锁屏”那样的锁屏界面. 准备:本程序共需要 两个ac ...
- XC一键锁屏应用
XC一键锁屏,一键Android锁屏应用,彻底解放开关机键~ 下载地址: http://download.csdn.net/detail/jczmdeveloper/7329447
- Android忘记锁屏密码如何进入手机?
Android忘记锁屏密码如何进入手机? 1.关闭手机 2.进入recovery模式(即恢复模式,记住不是挖煤模式.进入恢复模式不同手机有不同方法,三星的话安主页键,关机键和音量+(或-键), ...
随机推荐
- 构造方法,重载,static,math类(java基础知识七)
1.构造方法概述和格式 * A:构造方法概述和作用 * 给对象的数据(属性)进行初始化 * B:构造方法格式特点 * a:方法名与类名相同(大小也要与类名一致) * b:没有返 ...
- Go语言的管道Channel用法
本文实例讲述了Go语言的管道Channel用法.分享给大家供大家参考.具体分析如下: channel 是有类型的管道,可以用 channel 操作符 <- 对其发送或者接收值. ch <- ...
- UIButton常见属性和方法
一.创建,两种方法: 1. 常规的 initWithFrame UIButton *btn1 = [[UIButton alloc]initWithFrame:CGRectMake(10, 10, 8 ...
- POJ3696:The Luckiest number(欧拉函数||求某数最小的满足题意的因子)
Chinese people think of '8' as the lucky digit. Bob also likes digit '8'. Moreover, Bob has his own ...
- linux下ping不通的解决方法
转自:https://blog.csdn.net/weixin_33400820/article/details/80227702 今天在做练习的时候,发现如何都无法ping通外网,在经过各种网络求助 ...
- POJ - 1661 - Help Jimmy - 简单dp
http://poj.org/problem?id=1661 一般化处理,把一开始的落地和大地都视作平台,设计平台类的属性.dp的时候显然是从上往下dp的,而且要小心Jimmy不能够穿过平台,也就是从 ...
- hdoj1394
题意还告诉我们是0-n-1之间的数,那么我们每次把一个数放到后面去,求一下比他大的,还有比他小的: 比如: 1 3 6 9 0 8 5 7 4 2 逆序数num:22 3 6 9 0 8 5 7 4 ...
- c#删除指定文件夹中今天之前的文件
1.说明 使用Directory类对指定文件夹下的今天或者更早日期之前的文件进行删除.原文链接:http://www.cnblogs.com/lengzhan/p/6423943.html 2.代码 ...
- 2019年BAT面试通关宝典:数据结构+JVM+并发编程+分布式...
前言 金三银四俗称跳槽黄金季,很多同学都想趁着这段时间拿高薪,去更牛逼的公司工作,认识更多大牛,提升自己的职场竞争力. 那怎样才能通过BAT面试官的考核?怎样成为一名Offer收割机? 收割Offer ...
- React的深入浅出
react组件重新渲染有两种途径:1.自身调用setState:2.父组件传入新的props.3.但这两种途径都不会必然调用render而引起重新渲染, 都会先经过shouldComponentUpd ...