Android4.0+锁屏程序开发——按键屏蔽篇
开发锁屏程序的时候我们要面临的重要问题无疑是如何屏蔽三个按键,Back,Home,Menu
看似简单的功能,实现起来却并不是那么容易。
【屏蔽Back按键】
相对来说,屏蔽Back键是比较简单的,只需要在我们的Activity中重写onKeyDown方法,并在其中对Back按键进行拦截即可,代码如下
//屏蔽back
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
}
return super.onKeyDown(keyCode, event);
}
【屏蔽Menu按键】
屏蔽Menu按键看似可以用和Back按键一样的处理方法,但是事实上并不是这样,由于在4.0以上的系统中,大多数情况下点击Menu按键会出现Recent app页面。
所以使用上面的方法并不管用。
这时候,我们可以采用另外一种方法——检测我们的窗体是否失去焦点,如果失去,就把弹出的窗体给缩回去。这个方法也可以防止下拉状态栏
代码如下
//屏蔽menu
@Override
public void onWindowFocusChanged(boolean pHasWindowFocus) {
super.onWindowFocusChanged(pHasWindowFocus);
if (!pHasWindowFocus) {
sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
}
}
【屏蔽Home按键】
接下来我们要面对的是最复杂的部分,屏蔽Home按键,Home按键由于其特殊性,无法被拦截。
但是我们可以参考其他锁屏应用,设置一个自己的主屏幕应用,让每次点击Home按键的时候启动我们自己的主屏幕,再进行判断,是继续停留锁屏界面还是启动系统 的主屏幕页面。
我们的主屏幕界面Activity应该是没有窗体的,这样我们点击Home的时候就不会看到额外的窗体,让用户体验更好。
下面我们用代码来做讲解
public class Home extends Activity {
HomeChoice homeChoice; //HomeChoice为设置和启动主屏幕类
private SharedPreferences sharedPreferences;
private Editor editor;
private boolean isLock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
homeChoice = new HomeChoice(this);
sharedPreferences = getSharedPreferences("homeChoice", MODE_PRIVATE);
}
@Override
protected void onStart() {
super.onStart();
isLock = sharedPreferences.getBoolean("IsLocked",false);
//判断锁屏Activity是否在前台
if (isLock) {
Intent mIntent = new Intent(this, ScreenLockActivity.class);
startActivity(mIntent);
finish();
}
//不在前台则启动预设的主屏
else {
try {
homeChoice.originalHome();//启动预设主屏
} catch (Exception e) {
homeChoice.chooseBackHome();//还没有预设,让用户预设
}
}
}
}
为了让这个界面在按下Home时被启动,我们需要在AndroidManifest中进行设置,如下
<activity
android:name=".Home"
android:theme="@android:style/Theme.NoDisplay"//设置主题为不可见
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />//可以作为桌面被识别
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
我们还需要在系统设置里将我们的应用设置为主屏幕
例如,在原生的系统中可以这样设置


在MIUI中可以这样设置
其他应用管理-->默认应用设置-->桌面
通过上面的步骤,我们就可以完成对Home按键的屏蔽了
上面的代码只是为了让大家更好的理解如何屏蔽按键的原理,并不完整,我已经将一个完整的Demo代码上传到了GitHub上面,如果大家有需要可以去下下来试一下。
地址:https://github.com/u3shadow/ScreenLocker
最近由于涉及到了锁屏方面的开发,所以找了很久这方面的资料,但是都不完善,很痛苦。希望这篇文章能帮助到大家。
Android4.0+锁屏程序开发——按键屏蔽篇的更多相关文章
- Android4.0+锁屏程序开发——设置锁屏页面篇
[如何开发一个锁屏应用] 想要开发一个锁屏应用,似乎很难,其实并没有想象中那么难. 从本质上来说,锁屏界面也只是一个Activity而已,只是这个界面比较特殊,在我们点亮屏幕的时候,这个界面就会出现. ...
- C# .NET锁屏程序(顺带屏蔽任务管理器)
原文:C# .NET锁屏程序(顺带屏蔽任务管理器) 第一步:将窗体的FormBorderStyle设置为none,WindowState设为Maximized 占据整个屏幕. 第二步:使用钩子监控全局 ...
- android4.0 锁屏实现(转)
转载请表明出处:http://blog.csdn.net/wdaming1986/article/details/8837023 好了,言归正传,说说锁屏了,其实把锁屏做成apk的形式,会引起很多问题 ...
- 定时锁屏程序,Python祝你原理猝死!
高以翔事件 11月27日在<追我吧>第九期节目的录制过程中,当期参与嘉宾高以翔奔跑时突然减速倒地,节目现场医护人员第一时间展开救治,并紧急将其送往医院.经过两个多小时的全力抢救,医院最终宣 ...
- 解决:Android4.3锁屏界面Emergency calls only - China Unicom与EMERGENCY CALL语义重复
从图片中我们可以看到,这里在语义上有一定的重复,当然这是谷歌的原始设计.这个问题在博客上进行共享从表面上来看着实没有什么太大的意义,不过由于Android4.3在锁屏功能上比起老版本做了很大的改动,而 ...
- 解决:Android4.3锁屏界面Emergency calls only - China Unicom与EMERGENCY CALL语义反复
从图片中我们能够看到,这里在语义上有一定的反复,当然这是谷歌的原始设计.这个问题在博客上进行共享从表面上来看着实没有什么太大的意义,只是因为Android4.3在锁屏功能上比起老版本号做了非常大的修改 ...
- 微信小程序开发之入门篇(熟悉开发工具)
个人的每一篇博文都谈不上有什么技术含量,只是为了帮助不熟悉微信小程序开发的自己及他人提供一下思路.谢谢,下面开始! PS: 因为本人没有小程序的内测资格,所以所有的开发及Demo都是无AppId的,如 ...
- android6.0锁屏界面接收新通知处理流程
灭屏状态下,接收新信息,屏幕会半亮显示通知流程: 1,应用构造notification后,传给NotificationManager,而后进入NotificationManagerService处理. ...
- Mac 如果一定要写个锁屏程序的话就这样
package test; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import ...
随机推荐
- Java发展前景与职业方向解析
大多数人选择Java可能只是因为听说Java前景好.Java比较好找工作.Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里,心里却是没有什么概念的.本文为你解答学J ...
- Android的长度单位及屏幕分辨率
屏幕分辨率基础 1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机 ...
- 微软原版WINDOWS10-LTSB-X64位操作系统的全新安装与优化
原版WINDOWS10_LTSB_X64位操作系统,安装U盘的制作 1.在一台能正常运行的电脑上,下载原版WINDOWS10_LTSB_X64位操作系统镜像(ISO)文件: 2.运行UltraISO. ...
- python笔记-4(装饰器、生成器、迭代器)
一.熟练掌握装饰器的原理 (在装饰器学习的过程中,查了看了很多资料,个人感觉走了很多的弯路,这个笔记,分享我的理解,希望能帮助到一些人.本文对装饰器的描述,侧重点是条理与逻辑思路,想通过从无到有的方式 ...
- 【转】C# Socket编程(5)使用TCP Socket
[转自:https://www.cnblogs.com/IPrograming/archive/2012/10/18/CSharp_Socket_5.html] TCP 协议(Transmission ...
- webpack新版本4.12应用九(配置文件之输出(output))
output 位于对象最顶级键(key),包括了一组选项,指示 webpack 如何去输出.以及在哪里输出你的「bundle.asset 和其他你所打包或使用 webpack 载入的任何内容」. ou ...
- 一周学会HTML----Day03常用标签(下)
form 标签 表单(重要) 表单用途 用于收集用户信息,提交给服务器 基本使用 (action,method,enctype) 要提交的表单必须放到form里 input select textar ...
- ORA-00845 : MEMORY_TARGET not supported on this system(调大数据库内存无法启动)
问题描述:调大数据库内存后,启动数据库报 ORA-00845 : MEMORY_TARGET not supported on this system . -- 调大数据库内存后,数据库启动报错[ro ...
- 归并排序的JavaScript实现
思想 这是一种分治算法.将原始数组切分成较小的数组,直到每个小数组只有一项,然后在将小数组归并为排好序的较大数组,直到最后得到一个排好序的最大数组. 代码 function mergeSort(arr ...
- shell中字体变色
在linux中给字体使用数字代码变色 字体颜色代码:重置0 ,黑色30,红色31,绿色32,黄色33,蓝色34,洋红35,青色36,浅灰37 效果代码:1m加粗 2m加下划线 5m闪动效果 7m ...