2019独角兽企业重金招聘Python工程师标准>>>

前因

前两天入手了一台MX4 Pro。自己拿到真机之后,着实高兴了一阵,立刻把玩了一会。虽然MX4 Pro的小圆圈没了,但是为了指纹传感器,因此这点我忍了。

但是我发现了一个问题:就是原来常按小圆点之后的锁屏功能没了,现在必须要按下去之后才能实现锁屏。每次锁屏那“卡”的一声对于我来说简直就是折磨------我的指纹传感器被按坏了怎么办。。。。。。。于是,决定自己写一个很简单的一键锁屏程序(Github地址)。

开始

自从安卓2.2以后,Android通过提供设备管理API对设备进行系统级别的操作,比如远程擦除数据,锁屏功能等。在这里,我们就需要用到这个API来实现一键锁屏功能。

首先我们需要在res/xml目录下建一个xml文件,这个文件用来说明我们想实现什么样的策略,例如这样:

<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>

在上面的文件列出了你想要实现的策略,比如禁用摄像头,擦除数据,锁屏等,你想要实现想要的策略都必须在这里进行定义,如果你没在这里进行定义,将会导致SecurityException。在这里,我们只需要实现锁屏策略,因此,只需要以下代码就行了:

<?xml version="1.0" encoding="UTF-8"?><device-admin xmlns:android="http://schemas.android.com/apk/res/android" ><uses-policies><force-lock /></uses-policies>
</device-admin>

之后你要写一个Receiver,这个Receiver必须继承DeviceAdminReceiver(仅仅需要继承即可,一般情况下啊,你其实不需要写任何东西)。这个Receiver用来接受系统的消息,即你是否可以得到使用这些策略的授权。因此,这个Receiver必须包含以下内容:

  • 必须具有BIND_DEVICE_ADMIN的权限
  • 必须可以响应ACTION_DEVICE_ADMIN_ENABLED的意图,这个定义在manifest文件中。

manifest文件定义如下:

<receiverandroid:name=".DeviceFyalesReceiver"android:description="@string/app_name"android:label="@string/app_name"android:permission="android.permission.BIND_DEVICE_ADMIN"
><meta-dataandroid:name="android.app.device_admin"android:resource="@xml/lock_screen"/><intent-filter ><action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/></intent-filter>
</receiver>

接下来就是写Activity了:

package fyales.com.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.*;
import android.os.Process;/**
*   @author fyales
*  @date 2015-01-10
*/
public class MainActivity extends Activity {private DevicePolicyManager devicePolicyManager;private ComponentName componentName;private final static int LOCK_SCREEN_CODE = 201;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);componentName = new ComponentName(this,DeviceFyalesReceiver.class);lockScreen();android.os.Process.killProcess(Process.myPid());}/*** 实现系统锁屏*/private void lockScreen(){if (devicePolicyManager.isAdminActive(componentName)){devicePolicyManager.lockNow();}else{Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);startActivityForResult(intent, LOCK_SCREEN_CODE);}}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode == Activity.RESULT_OK) {switch (requestCode) {case LOCK_SCREEN_CODE:devicePolicyManager.lockNow();break;default:break;}}}
}

这边的DevicePolicyManager就是管理设备策略的。哲理需要注意的一点就是,因为我们是实现锁屏功能的,因此,当activity开始执行后,当锁屏成功会后,应该立刻杀死该进程,所以我们调用了android.os.Process.killProcess(Process.myPid())方法。

优化

我们的程序到这里差不多就告一段落了,但是我在运行的时候发现一个问题,就是点击一键锁屏的图标时,它有一个打开窗口的事件发生。这在MX4 Pro上不是很明显,但是在MX3上就显而易见了。在MX3上,整个屏幕会先白一下,然后再会锁屏,这个很令人抓狂,因此,我们必须要实现窗口不显示,直接锁屏的功能。

原来我想了各种方法,比如用Service或者Widget啊,但是他们有各自的短板。最后,我找到了一个很好的方法就是设置android:theme="@android:style/Theme.NoDisplay"。完美解决!

最后,容许我晒一张MX4 Pro的图片,哈哈。

口号:Make things interesting!

参考了下面的博客

http://www.cnblogs.com/sommer/p/3238060.html

<br /> <br /> ![MX4 Pro](http://fyales.qiniudn.com/MX4_PRO.jpg) <br /> <br />

转载于:https://my.oschina.net/weiCloudS/blog/366105

MX4 Pro上实现一键锁屏相关推荐

  1. Android之 设备的超级管理员与一键锁屏之原理

    Android之 设备的超级管理员的介绍 Android 2.2引入了支持企业应用程序提供Android设备管理API.设备管理API提供了设备管理功能在系统水平.这些api允许您创建安全性敏感的应用 ...

  2. android 一键锁屏

    为了大家少走弯路,也是为了相互交流,多结识一些朋友!我在这里贴出来:android手机上的一键锁屏程序具体代码及注意的问题, 下面就以我的工程为例进行详细说明: 工程结构 LockScreen.jav ...

  3. 电脑设置一键锁屏方法

    短时间内不在电脑面前,又不想被别人偷窥隐私,可以对电脑设置一键锁屏.设置的方法也很简单,可以直接通过快捷键操作,下面我们就来看看具体的操作. win10骨头精简版下载_win10最小精简版500m 6 ...

  4. 华为手机如何把计算机添加到桌面,华为手机一键锁屏添加桌面快捷方式的操作步骤...

    华为手机作为拥有便捷高稳定性的国产智能手机代表,其品牌的美誉度,很多来源于实践应用的效果.科技与实用相结合,美观与实用相结合,精致贴心满足大众生活需要,更轻松的满足了一众之所需,刚刚好是华为手机的主要 ...

  5. 三星N900刷机包 基于颓废NO.7更新 状态栏透明 右上角一键锁屏

    ___________________________________________________________________ Rom下载地址:http://www.shuajizhijia. ...

  6. android锁屏软件开发,Android一键锁屏开发全过程

    一.项目简介: 项目:<Android 一键锁屏> 开发周期:4天 代码量:100行 二.项目流程: 三.项目代码 1.主程序代码: 1.private DevicePolicyManag ...

  7. Android一键锁屏的例子

    先说点题外话,lenovo的手机质量真不是特叫人放心,不如他家的电脑.媳妇的手机电源键不怎么好用了,好在点亮屏幕可以使用侧边的音量键,但是锁屏就只能按电源键了,经常按了好几次都锁不上.于是,有了下面关 ...

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

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

  9. Android一键锁屏功能的实现

    前不久换了部新手机,因为原来用的手机原装了一键锁屏的应用,用的还习惯,新手机上没有,就想着找一个装上,后来在网上搜了下一键锁屏的实现,自己拿来改了改,安装后感觉还可以.现在分享出来. 源码: 1. M ...

最新文章

  1. qt中定时器Timer的使用
  2. stateflow新建状态中的枚举类型
  3. Go语言内置的基础类型
  4. 痛苦如此持久,像蜗牛充满耐心地移动;快乐如此短暂,像兔子的尾巴掠过秋天的草原...
  5. silverlight3:(ItemControl 的)UI Virtualization
  6. Daily Report 2012.11.2 刘宇翔
  7. 使用 IntelliTrace 调试应用程序
  8. 区块链 Gossip Protocol是什么
  9. 如何将几个变量相加减乘除(图文+数据集)【SPSS 075期】
  10. 全国市级城市拼音-中文对照表(json格式)
  11. 四阶五级matlab,微分方程数值解法matlab(四阶龙格—库塔法).ppt
  12. 巫师3储物箱在哪_巫师三孤岩宝箱在哪 | 手游网游页游攻略大全
  13. python xps_XPS 15 9560 安装 Ubuntu 18.04
  14. 怎样建立个人邮箱账号?个人邮箱有什么功能?
  15. Pycharm删除键、复制粘贴键失灵解决方案
  16. DevExpress 单元格的设置(可设字体、字号、前景色、背景色)
  17. JS加密小结---银行卡号,手机号,姓名加密显示星号
  18. xyplorer设置备忘
  19. 无敌哈拉少(奋起反抗的人)
  20. 山东省2020年12月计算机考试,12月20日开始报名!山东2020年3月全国计算机等级考试注意事项来咯...

热门文章

  1. main (),int main(),int main(void)等的区别
  2. 字符金字塔------C语言
  3. 下图的crc是怎么进行运算的?
  4. Ubuntu 12.04 鼠标左键失灵
  5. error:Permissions 0644 for '_rsa' are too open. It is required that your priv
  6. 关于Android系统隐藏导航栏的两种方法
  7. java-php-python-ssm邢台市公寓式月亮酒店管理系统计算机毕业设计
  8. Revit (5) - 二开 -创建墙体
  9. 彻底搞懂word-wrap,word-break,white-space
  10. 导入导出thunderbird(雷鸟)中的邮件