Android的自动锁屏、解锁

前言(容我吐槽一会儿…)

前一段时间做了一个大屏幕项目,有几个比较个性的需求,客户要求:定时自动锁屏、自动定时解锁、定时自动开关机,页面统一(同一时刻显示同一个页面)等,当时,感觉没什么,无非就是麻烦点,可真正动手的时候,才感觉到这里面的麻烦之处。关键是大屏幕显示与你真正的手机,完全是两码事,我在手机模拟器上程序都运行没有任何问题,但是,一旦将程序部署到大屏幕上时,崩溃、定时不准确、定时、蓝屏等一些列问题,接踵而至,当时的心情像是一万个草泥马跑过。。。

言归正传,项目中涉及到自动锁屏、解锁,开关机等功能,本人将自己的代码简要说明一下,望能够给大家一些帮助:

  • 自动锁屏的实现

  • 自动解锁的相关实现


1、自动锁屏的实现

手机锁屏需要相关的权限,在AndroidManifext.xml中加入权限:

uses-permission android:name=”android.permission.DISABLE_KEYGUARD”

private DevicePolicyManager policyManager;private ComponentName componentName;//获取设备管理服务policyManager = (DevicePolicyManager)  getApplicationContext().getSystemService(Context.DEVICE_POLICY_SERVICE);componentName = new ComponentName(this, AdminRecieve.class);/** 假如先判断是否有权限,如果没有则调用activeManage(),然后立即锁屏。* 这样做是有问题的,因为activeManage()可能还在等待另一个Activity的结果,那么此时依然没有权限却* 执行了lockNow(),这样就出错了。* 处理方法有2个:* 1、是重写OnActivityResult()函数,在里面判断是否获取权限成功,是,则锁屏并finish()* 否则继续调用activeManage()获取权限(这样激活后立即锁屏,效果很好)* 2、不重写OnActivityResult()函数,第一次获取权限后不锁屏而立即finish(),这样从理论上说也可能* 失败,可能权限还没获取好就finish了(这样激活后就回到桌面,还得再按一次锁屏才能锁)* 综上推荐第一种方法。*///判断是否有锁屏权限,若有则立即锁屏并结束自己,若没有则获取权限if (policyManager.isAdminActive(componentName)) {policyManager.lockNow();} else{activeManage();}//获取权限private void activeManage(){// 启动设备管理(隐式Intent) - 在AndroidManifest.xml中设定相应过滤器Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);//权限列表intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);//描述(additional explanation)intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后才能使用锁屏功能哦亲^^");startActivityForResult(intent, MY_REQUEST_CODE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data){//获取权限成功,立即锁屏并finish自己,否则继续获取权限if (requestCode == MY_REQUEST_CODE && resultCode == Activity.RESULT_OK){policyManager.lockNow();} else{activeManage(); //建议不要开启这个,要不然会一直请求权限}super.onActivityResult(requestCode, resultCode, data);}

2、自动解锁的相关实现

手机解锁需要相关的权限,在AndroidManifext.xml中加入权限:

uses-permission android:name=”android.permission.WAKE_LOCK”

   /***     唤醒屏幕并解锁权限 *     <uses-permission android:name="android.permission.WAKE_LOCK" />*/@SuppressLint("Wakelock")@SuppressWarnings("deprecation")public static void wakeUpAndUnlock(Context context) {// 获取电源管理器对象PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);// 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是调试用的TagPowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP| PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");// 点亮屏幕wl.acquire();// 释放wl.release();// 得到键盘锁管理器对象KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");// 解锁kl.disableKeyguard();}

Android的自动锁屏、解锁相关推荐

  1. android解锁界面分析,Android 7.0 锁屏解锁之向上滑动显示解锁界面分析

    Android 7.0 锁屏解锁之向上滑动显示解锁界面分析 by jing.chen 锁屏的解锁操作是在锁屏界面向上滑动实现的,通过向上滑动调出解锁界面(如图案.PIN.密码解锁界面),在解锁界面输入 ...

  2. android app自动锁屏,Android开机自动启动app 不锁屏

    Android开机自动启动app 不锁屏 发布时间:2020-07-17 03:22:20 来源:51CTO 阅读:2086 作者:清水禅石 主要参考:http://life173.blog.51ct ...

  3. 如何修复Kindle频繁自动锁屏和解锁

    12年入手kindle dxg,用了几年,看pdf的利器,感觉很不错, 2016年夏天的时候,kindle突然出现频繁的锁屏和解锁.在网上搜了一下,只有在贴吧找到一个类似的问题,但是没有解决方案,联系 ...

  4. android 强制锁屏代码,Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android. ...

  5. android锁屏代码分析,Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android. ...

  6. Android 系统(145)---切换两张sim卡的移动网络,自动锁屏

    切换两张sim卡的移动网络,自动锁屏 1描述 1. 插入两张sim卡,设置安全锁屏 2. 设置--网络和互联网--SIM卡--首选sim卡--移动数据--切换两张卡的移动网络 3. 手机自动锁屏   ...

  7. android 九格锁屏,自定义 View 之实现九宫格锁屏效果

    Android 锁屏功能是我们最常用的.最经常接触的一个软件之一了吧,因为我个人也是使用的 Android 手机,虽然手机不怎么好,但是也有锁屏这个功能.虽然现在的手机都是指纹解锁,但是我的手机解锁功 ...

  8. 基于距离传感器的自动锁屏程序

    最近写了一个基于距离传感器锁屏的程序,在这里Mark一下. 手机为了节约能耗,一段时间没有操作就会自动锁屏,这带来了一个问题--你得不断的解锁,当然用了这么多年大家也许都习惯了.现在我想尝试一种既节约 ...

  9. fcode-页面九宫格自动锁屏jquery插件

    fcode.js 自动锁屏插件 fcode.js是什么? fcode.js是一款web页面九宫格自动锁屏js插件,依赖于jquery, 会在设置的范围里,判断用户有无操作,然后执行锁屏的功能. 就一个 ...

最新文章

  1. java.util.concurrent.CyclicBarrier;
  2. [小技巧]ASP.NET Core中如何预压缩静态文件
  3. 前端学习(1321):node.js得异步api
  4. 高中生兴趣班c语言,C语言电脑编程兴趣班测试题目资料.doc
  5. ajax json 封装,Ajax--json(Ajax调用返回json封装代码、格式及注意事项)
  6. [Ext JS 7]7.4 样式主题(Theme)
  7. hashCode and equals in map
  8. java short相加_为什么两个short类型相加会自动提升为int?
  9. 诚之和:极地冰川融化会将远古病原体释放出来吗?
  10. 判断手机号码格式的方法
  11. PCB常见的几种钻孔
  12. 如何实现APP左右滑动DIV切换或图片滑动CSS
  13. 王者荣耀主播(孤王)过度劳累猝死 曾被誉为国服第一辅助
  14. Latex写文章时插入单栏图片和双栏图片方法
  15. [转载] js 下获取子元素的方法 -- 李富生
  16. Adobe Photoshop 画笔无压感
  17. 驴妈妈目的地运营集团喜获“红珊瑚”奖
  18. “狗屁不通文章生成器”火爆 Github,一句话生成万字论文的神器了解一下?
  19. 发那科机器人刷机操作
  20. 深度学习 机器学习 公式中常用的符号

热门文章

  1. 小蚁摄像机存储卡异常解决方法
  2. jpeg2000算法详解(1)
  3. LoRa技术应用场景
  4. CSS基础之媒体类型(@media)样式
  5. 企服三会 | 企服三会首发,洞见2018中国移动办公发展趋势
  6. CIO要顶住词汇爆炸的冲击(转)
  7. PS切片为什么会切出很多不想切的东西呢?
  8. Webix JavaScript UI 9.1.6
  9. Mac 忘记Mysql密码解决办法
  10. 有限元分析中复合材料建模