android 锁屏程序开发

参考http://blog.csdn.net/wdaming1986/article/details/8837023

锁屏程序的步骤如下:
1、替换系统锁屏
2、屏蔽Home键,back键、menu键
3、锁屏程序不出现在最近任务列表中
4、屏幕唤醒时显示锁屏界面

一、替换系统锁屏

调研市场绝大部分锁屏程序,会引导用户关闭系统锁屏。当用户不关闭系统锁屏的时候我们可以将我们自定义的锁屏程序覆盖在系统锁屏程序上,解锁系统锁屏。

具体做法如下:

api level 小于13时:

mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);

mKeyguardLock =mKeyguardManager.newKeyguardLock(“FxLock”);

            // 屏蔽手机内置的锁屏
            if (Build.VERSION.SDK_INT < 13) {
                mKeyguardLock.disableKeyguard();
            }

大于13时,我们设置为自定义锁屏界面的window添加WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD标记

2、屏蔽Home键

back、menu键我们可以在onKey()函数中进行屏蔽。由于系统安全原因,home键不能使用常规方式屏蔽

目前了解到的方式如下:

1、2.3以下系统

@Override

public void onAttachedToWindow () {

    System.out.println("Page01 -->onAttachedToWindow");
    this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    super.onAttachedToWindow();

}

2、4.0系统

static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;

getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED)

3、4.0以上系统

弹出type为 WindowManager.LayoutParams.TYPE_SYSTEM_ERROR

的对话框(具体原理可参考PhoneWindowManager.java)此种方式据说在小米、魅族等系统无效(实测miui6无效,华为手机有效)

以上3中解决方案均来自互联网,实际调研发现锁屏应用中snap效率锁屏目前是做的比较好的。通过反编译其代码可以发现其使用了第三种解决方案,并且对小米、魅族系统单独做了适配。

3、锁屏应用不出现在任务列表

这个在manifest中添加android:excludeFromRecents=“true"即可

4、屏幕唤醒显示自定义锁屏

目前通用做法是启动后台service,在service中注册广播接收器(Intent.ACTION_SCREEN_ON, Intent.ACTION_SCREEN_OFF, Intent.ACTION_BOOT_COMPLETED, Intent.ACTION_CLOSE_SYSTEM_DIALOGS)

在收到Intent.ACTION_SCREEN_ON广播后,启动自定义锁屏界面

收到Intent.ACTION_CLOSE_SYSTEM_DIALOGS广播(长按电源键),隐藏type为 WindowManager.LayoutParams.TYPE_SYSTEM_ERROR的对话框,这样便可以显示系统关机对话框。

时间: 2024-11-04 18:23:35

android 锁屏程序开发的相关文章

Android4.0+锁屏程序开发——设置锁屏页面篇

[如何开发一个锁屏应用] 想要开发一个锁屏应用,似乎很难,其实并没有想象中那么难. 从本质上来说,锁屏界面也只是一个Activity而已,只是这个界面比较特殊,在我们点亮屏幕的时候,这个界面就会出现. 而且在此界面中,我们可以用一些行为来退出,比如点击按钮等. 还有一个特征是在这个界面的时候,我们通常是不能使用底部的三个按钮的 关于如果屏蔽底部的三个按钮,我已经在另一篇博客Android4.0+锁屏程序开发——按键屏蔽篇进行了总结,有需要的朋友可以参看. 这篇博客我们主要讨论如何让一个Activ

Android4.0+锁屏程序开发——按键屏蔽篇

开发锁屏程序的时候我们要面临的重要问题无疑是如何屏蔽三个按键,Back,Home,Menu  看似简单的功能,实现起来却并不是那么容易. [屏蔽Back按键] 相对来说,屏蔽Back键是比较简单的,只需要在我们的Activity中重写onKeyDown方法,并在其中对Back按键进行拦截即可,代码如下 //屏蔽back @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case

一枚Android恶意锁屏程序分析

一枚Android恶意锁屏程序分析 [文章标题]:一枚Android恶意锁屏程序分析 [文章作者]: Ericky [作者博客]: http://blog.csdn.net/hk9259 [下载地址]: 由于恶意程序,不提供下载 [保护方式]: 无 [作者声明]: 本人水平有限,若有不足错误之处请指正 0x1软件界面: 0x2分析 反编译APK后得到APK类文件目录如下: 进入LockActivity定位到如下地方: 图中红色部分就是重置你的手机开机密码了. Mspmm就是设置的密码. Jb解密

Android企业级应用程序开发完整训练:精通Android商业级开发最佳实践的24堂课

从企业级商业实战的角度入手,24小时内通过23个动手实战案例,循序渐进的对Android商业级别的应用程序开发要点各个击破,依托于在多年的Android(6款完整的硬件产品和超过20款应用软件)开发和企业级培训经验(超过150期的次Android的企业内训和公开课),旨在在实务的基础之上帮助你完成任何复杂程序的高质量Android应用程序开发,让Android开发跟上想象的速度.最后,通过ActivityManagerService揭秘Android应用程序一切行为背后的核心根源,让你从此开发应

android锁屏软件制作

转载请标明出处http://blog.csdn.net/mingyue_1128 一.首先要创建一个Service保证Service一直开启,同时不被一键清理掉. 二.屏蔽掉系统的锁屏 三.创建锁屏的Activity,在Activity中屏蔽掉back,menu,home键 四.保证自己的进程不在最近任务中出现 一.创建一个Service名字为LockService public class LockService extends Service{ private KeyguardManager

jQuery仿Android锁屏图案应用插件

<!doctype html> <html> <head> <meta charset="utf-8"> <title>jQuery仿Android锁屏图案应用插件DEMO演示</title> <link href="css/patternLock.css" rel="stylesheet" type="text/css" /> <scr

Android锁屏软件

需求描述:锁屏软件就是点击应用然后直接锁屏,不会弹出任何界面 设计思路:应用启动以后通过getSystemService获取系统的服务,调用安卓系统的DevicePolicyManager和ComponentName来对系统进行操作,先判断用户是否有相应的权限,如果有,直接锁屏,如果没有就先获取系统权限,再锁屏 废话不说,直接上代码 Main.java(主页面) 1 package com.example.wangshibang.screenlock; 2 3 import android.ap

android锁屏

(基于framework 目录下) 一.base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 开机执行到:systemReady()方法,调用  mKeyguardMediator.onSystemReady();开始锁屏 修改是否锁屏 public void systemReady() { if (mKeyguardMediator != null) { try { //自己添加的,一个变量,如果是0,

Android 锁屏生命周期问题

今天在做视频播放时碰到了一个问题:当用户按下电源键锁屏后(屏幕黑了)视频播放停止了.但是当按下解锁键后(屏幕亮,但是未解锁)的时候视频开始自动播放了. 我的Activity在manifest.xml 配置如下 android:configChanges="locale|orientation|keyboardHidden" android:screenOrientation="landscape" 解决办法: 需要在android:configChanges=&qu