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模式(即恢复模式,记住不是挖煤模式.进入恢复模式不同手机有不同方法,三星的话安主页键,关机键和音量+(或-键), ...
随机推荐
- oracle:程序后台提示Io异常: The Network Adapter could not establish the connection)
今天要用tomcat部署一个系统,windows环境下,oracle和程序在一台机器上. 在配置jndi时,直接写成 jdbc:oracle:thin:@127.0.0.1:1521:orcl.启动程 ...
- Oracle备份与恢复:RMAN
今天第一次学习RMAN的使用.先登录系统: 数据库未启动,rman命令不能执行.在rman下 也可以 startup . 全库备份的命令:backup database 查看备份集. 下面模拟,数据 ...
- hdu-2066 一个人的旅行(最短路spfa)
题目链接: 一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Pr ...
- 是时候开刷NOI了
整天挨着毛爷爷,压力好大.. 看毛爷爷即将炖完NOI,我的确也该刷了 原则是从头到尾自己想(虽然看了一次题解),可以不A掉. NOI2009 day1: T1 题目略神,我还是不讲了...(就这题我W ...
- notepad++的NppFTP插件远程连接linux操作系统
1.首先要有NppFTP插件,如果没有可以去下面链接或者其他网站下载: https://sourceforge.net/projects/nppftp/files/latest/download ...
- POJ 3419 Difference Is Beautiful (DP + 二分 + rmq)
题意:给n个数(n<=200000),每个数的绝对值不超过(10^6),有m个查询(m<=200000),每次查询区间[a,b]中连续的没有相同数的的最大长度. 析:由于n太大,无法暴力, ...
- UVaLive 6588 && Gym 100299I (贪心+构造)
题意:给定一个序列,让你经过不超过9的6次方次操作,变成一个有序的,操作只有在一个连续区间,交换前一半和后一半. 析:这是一个构造题,我们可以对第 i 个位置找 i 在哪,假设 i 在pos 位置, ...
- css margin边界叠加问题详谈
问题:给子元素一个margin-top值,其父元素会跟着往下走margin-top的值 一.代码展示 HTML <body> <div class="box"&g ...
- git apply
1. git 安装 2.git 与服务器的验证 1.生成ssh ssh-keygen -t rsa -C "1107247128@qq.com" 2.查看生成的pub文件, ...
- WIN7 64位操作系统 无法找到Access驱动
为了更充分的利用硬件资源,我想很多人都开使用64位操作系统了,同时你可以也发现了在64位操作系统上ODBC的驱动找不到了,所以ODBC的东西都没法用了. 因为2007以前版本的Office只有32位版 ...