题记:

这个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的更多相关文章

  1. Android一键锁屏源码

    APK下载 源程序下载 锁屏流程如下(参考于Android一键锁屏开发全过程[源码][附图]) 源码参考于一键锁屏 源码 一共有2个Java文件: package com.example.onekey ...

  2. android DevicePolicyManager实现一键锁屏

    本文章一部分资料来源于网上 1.实现一键锁屏关键是DevicePolicyManager这个类,然后使用lockNow():方法. 2.DevicePolicyManager类,可以让你的做软件获得系 ...

  3. Android简易实战教程--第六话《开发一键锁屏应用2·完成》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51885687点击打开链接 上一篇,初步开发了这个应用,功能都有了(见http:// ...

  4. Android Device Administration 设备管理器——实现一键锁屏

    Android Device Administration 设备管理器--实现一键锁屏 最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊 ...

  5. Android简易实战教程--第五话《开发一键锁屏应用》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51860900 点击打开链接 Device Administration 对于这个应 ...

  6. 【WP 8.1开发】一键锁屏

    在WP8的时候,关于如何关闭屏幕,国内外都有不少文章了,大家有兴趣地可以搜搜,很多,我就不给链接了,因为稍后我的例子中会有. 其实,关闭屏幕是调用了未开放的API,正因为这个API未开放的,不敢保证所 ...

  7. android开发 锁屏 真正的锁屏,是go锁屏那种。

    想做个锁屏界面很久了,最近一周,历经千辛万苦,越过种种挫折,终于完美实现了这一要求,在此将锁屏思路分享出来. 注意:这不是什么一键锁屏,是类似“go锁屏”那样的锁屏界面. 准备:本程序共需要 两个ac ...

  8. XC一键锁屏应用

    XC一键锁屏,一键Android锁屏应用,彻底解放开关机键~ 下载地址: http://download.csdn.net/detail/jczmdeveloper/7329447

  9. Android忘记锁屏密码如何进入手机?

    Android忘记锁屏密码如何进入手机?     1.关闭手机 2.进入recovery模式(即恢复模式,记住不是挖煤模式.进入恢复模式不同手机有不同方法,三星的话安主页键,关机键和音量+(或-键), ...

随机推荐

  1. SDUT OJ 2892 A (字典树问题-输出出现次数最多的字符串的出现次数,60ms卡时间,指针+最后运行完释放内存)

    A Time Limit: 60ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给出n(1<= n && n <= 2*10^6)个字 ...

  2. skynet源码阅读<6>--线程调度

    相比于上节我们提到的协程调度,skynet的线程调度从逻辑流程上来看要简单很多.下面我们就来具体做一分析.首先自然是以skynet_start.c为入口: static void start(int ...

  3. sscanf在字符串中的一些使用

    弟弟的作业 你的弟弟刚做完了"100以内数的加减法"这部分的作业,请你帮他检查一下.每道题目(包括弟弟的答案)的格式为a+b=c或者a-b=c,其中a和b是作业中给出的,均为不超过 ...

  4. Python实现的一个简单LRU cache

    起因:我的同事需要一个固定大小的cache,如果记录在cache中,直接从cache中读取,否则从数据库中读取.python的dict 是一个非常简单的cache,但是由于数据量很大,内存很可能增长的 ...

  5. SQLite学习手册(开篇)

    一.简介: SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB.MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征 ...

  6. AES加密算法动画演示

    波士顿大学的Howard Straubing做了这么一个动画来展示AES加密算法的演示,挺不错的. 点击这里看全屏

  7. bzoj4750

    单调栈+前缀和 max很明显用单调栈搞,但是异或和呢?异或和我们拆位,对于每段区间的异或和[l[i]-i],[i,r[i]]答案就是0->1,1->0的乘积,但是统计的时候事实上是[l[i ...

  8. 容器vector 迭代器iterator 应用

    #include <iostream> #include <vector> using namespace std; int main() { vector<int> ...

  9. Unity3D4.* NGUI制作动态字库

    新建一个工程,这个工程必须没有中文路径,否则会不识别字体!!! 首先导入NGUI插件,这里我用的是NGUI 3.0.2版本的. 在Assets 下创建一个文件夹,用来存放接下来的工作文件 . 这里随便 ...

  10. django-ckeditor表情包修改

    一.版本 Django==1.11 django-ckeditor==5.2.2 二.关键步骤 1.删除旧的ckeditor静态文件 所在目录:项目目录下的static文件夹下的ckditor文件夹 ...