【如何开发一个锁屏应用】

想要开发一个锁屏应用,似乎很难,其实并没有想象中那么难。

从本质上来说,锁屏界面也只是一个Activity而已,只是这个界面比较特殊,在我们点亮屏幕的时候,这个界面就会出现。

而且在此界面中,我们可以用一些行为来退出,比如点击按钮等。

还有一个特征是在这个界面的时候,我们通常是不能使用底部的三个按钮的

关于如果屏蔽底部的三个按钮,我已经在另一篇博客Android4.0+锁屏程序开发——按键屏蔽篇进行了总结,有需要的朋友可以参看。

这篇博客我们主要讨论如何让一个Activity在屏幕点亮的时候出现,并且不触发系统的锁屏。

【设置自己的锁屏页面】

首先,点亮屏幕的时候,系统会发出一个广播,ACTION_SCREEN_ON,我们可以通过一个BroadcastReceiver来监听这个广播,并启动我们自己的Activity

例如下面的代码:

    private BroadcastReceiver screenReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("android.intent.action.SCREEN_ON") || action.equals("android.intent.action.SCREEN_OFF")) {
startActivity(toMainIntent);
}
}
};

但是,光启动我们的Activity还不够,因为仅仅是启动的话,系统的锁屏还是会出现在界面上,那么效果就变成了,我们解锁了系统的锁屏看到了自定义的界面。

这显然不是我们想看到的,我们想的是当屏幕一点亮就看到我们的界面。

我们可以通过对自定义界面的设置中关闭系统的锁屏来实现这个需求。

代码如下:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Window win = getWindow();
win.addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//解除系统锁屏
setContentView(R.layout.main_layout);
setView();//设置关闭按钮
}

通过上面的设置,我们就可以在点亮屏幕的时候看到自己的界面了。

一个完整的锁屏例子我已经上传到了GitHub上面,地址是:https://github.com/u3shadow/ScreenLocker

有需要的朋友可以进行参考。

通过这两篇博客,我们就可以基本实现一个锁屏应用了,在此基础上,我们可以对自定义界面做更进一步的优化,美化,做出自己理想的锁屏。

此系列就到这里,希望能帮助到大家,谢谢

最新文章

  1. 打开mysql时,提示 1040,Too many connections
  2. <转>九张图九句话
  3. beta发布排序结果
  4. 手把手教学:详解HTML5移动开发框架PhoneJS
  5. 使用泛型对java数组扩容
  6. Q10Ⅱ 双核 - 产品中心 - 海美迪
  7. fidder https以及Fiddler抓取HTTPS协议
  8. UITabBarItem's appearance
  9. 对于用div+css随心所欲布局的思考
  10. 【Common】-NO.122.common.1 - pv、uv、ip,tps、qps、rps术语
  11. Flink神秘工具lib
  12. VRF在区块链中的应用
  13. [转载]Javascript .then()这个方法是什么意思?
  14. Javascript中的闭包和C#中的闭包
  15. hdu-6406-dp+ST表
  16. VS2013 单元测试
  17. php flock 文件锁
  18. ps换衣服
  19. StrConv 内码转换
  20. CentOS下安装Tomcat环境

热门文章

  1. React Native组件(一)组件的生命周期
  2. C/C++ 安全编码 —— 指针与内存
  3. 暴力破解Windows RDP(3389)
  4. 机器学习(九)—FP-growth算法
  5. 用ofstream/ifstream 读写Unicod的TXT
  6. POJ1797 Heavy Transportation
  7. js 获取 本周、上周、本月、上月、本季度、上季度的开始结束日期
  8. LeetCode Design TinyURL
  9. 因实现本地浏览器访问nginx修改配置文件后,安装vsftpd失败
  10. (转)Android高性能编程(2)--延迟初始化