新版的qq,可以在锁屏下弹窗显示qq消息,正好目前在做的项目也需要这一功能。经过各种试验和资料查找,终于实现,过程不难,但是却有一些地方需要注意。

下面是实现过程。

1.使用Activity,而不是View

QQ的弹窗一开始我以为是悬浮View,用WindowManager去添加,但是无论如何就是不显示,后来在朋友提示下换成Activity来实现,在锁屏状态下就能弹窗了。

2.Activity的设置

Activity需要进行以下设置,才可以在锁屏状态下弹窗。

首先是onCreate方法,需要添加4个标志,如下:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

final Window win = getWindow();

win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED

| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD

| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON

| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

// 自己的代码

}

四个标志位顾名思义,分别是锁屏状态下显示,解锁,保持屏幕长亮,打开屏幕。这样当Activity启动的时候,它会解锁并亮屏显示。

然后在AndroidManifest.xml文件当中,对该activity的声明需要加上以下属性:

android:launchMode="singleInstance"

android:excludeFromRecents="true"

android:taskAffinity=""

android:theme="@android:style/Theme.Wallpaper.NoTitleBar"/>

而对于布局文件,要显示的view居中,背景透明。由于上面已经设置了背景为壁纸的背景,所以显示的是桌面的背景。如果背景设为默认的白色,则导致弹窗后面是一片白色,看起来很丑。如果背景设置为透明,则弹窗后面会显示出解锁后的界面(即使有锁屏密码,也是会显示解锁后的界面的),一样很影响视觉效果。

3.在广播中启动锁屏弹窗

我们设置的是锁屏下才弹窗的,非锁屏下就不适合弹出这个窗口了(你可以试一下,效果会很怪)。一般是注册一个广播接收器,在接收到指定广播之后判断是否需要弹窗,所以在BroadcastReceiver的接收代码中需要先判断是否为锁屏状态下:

@Override

public void onReceive(Context context, Intent intent) {

Log.d(LOG_TAG, intent.getAction());

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

if (km.inKeyguardRestrictedInputMode()) {

Intent alarmIntent = new Intent(context, AlarmActivity.class);

alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(alarmIntent);

}

}

这里用到的是KeyguardManager类,用来管理锁屏的,4.1之后该类的API新增了一个isKeyguardLocked()的方法判断是否锁屏,但在4.1之前,我们只能用inKeyguardRestrictedInputMode()方法,如果为true,即为锁屏状态。需要注意的是,在广播中启动Activity的context可能不是Activity对象,所以需要添加NEW_TASK的标志,否则启动时可能会报错。

4.更新弹窗信息

如果弹窗Activity本身并不主动更新信息,当有新的信息来时需要更新Activity的界面,由于在上面我们设的是singleInstance启动模式,所以需要覆写onNewIntent(Intent intent)方法,这样当再次启动这个activity时,新的intent会在该方法中传入。

5.再次亮起屏幕

如果该Activity并未退出,但是被手动按了锁屏键,当前面的广播接收器再次去启动它的时候,屏幕并不会被唤起,所以我们需要在activity当中添加唤醒屏幕的代码,这里用的是电源锁。可以添加在onNewIntent(Intent intent),因为它会被调用。也可以添加在其他合适的生命周期方法。添加代码如下:

PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);

if (!pm.isScreenOn()) {

PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP |

PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");

wl.acquire();

wl.release();

}

6.一些权限

下面是实现过程中需要的一些权限,由于我是从项目代码中抽取出来的,难免多加或遗漏,开发者自己注意一下:

第一条是解锁屏幕需要的,第二条是申请电源锁需要的。

以上所述是小编给大家介绍的Android程序开发仿新版QQ锁屏下弹窗功能,希望对大家有所帮助!

android布局管理器模仿qq登录效果,Android程序开发仿新版QQ锁屏下弹窗功能相关推荐

  1. Android布局管理器-使用TableLayout表格布局管理器实现简单的用户登录页面

    场景 Android布局管理器-使用FrameLayout帧布局管理器显示层叠的正方形以及前景照片: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  2. Android布局管理器-使用LinearLayout实现简单的登录窗口布局

    场景 Android布局管理器-从实例入手学习相对布局管理器的使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1038389 ...

  3. Android布局管理器-使用FrameLayout帧布局管理器显示层叠的正方形以及前景照片

    场景 Android布局管理器-使用LinearLayout实现简单的登录窗口布局: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  4. 移动开发技术(Android)——实验2 Android布局管理器的应用

    移动开发技术(Android)--实验2 Android布局管理器的应用 一.实验目的 二.实验内容 (一)创建一个Android项目,名称为"shiyan0201_专业_×××" ...

  5. 【android编程】 第三讲-Android布局管理器

    android编程 第三讲 Android布局管理器 文章目录 android编程 第三讲 Android布局管理器 约束布局管理器ConstraintLayout 线性布局管理器LinearLayo ...

  6. Android 布局管理器

    布局管理器:控制组件是如何摆放的. 5种常用的布局管理器: RelativeLayout,相对布局管理器 LineraLayout,线性 FrameLayout,帧 TableLayout,表格 Gr ...

  7. android开发技巧——仿新版QQ锁屏下弹窗

    新版的qq,可以在锁屏下弹窗显示qq消息,正好目前在做的项目也需要这一功能.经过各种试验和资料查找,终于实现,过程不难,但是却有一些地方需要注意. 下面是实现过程. 1.使用Activity,而不是V ...

  8. 仿新版QQ锁屏下弹窗

    首先,先感谢下: "貌似掉线"朋友,我在上这一个项目中也用到了这个功能,看了他写的博客后基本实现了我想要的.之所以说是"基本实现",是因为还差一点," ...

  9. android 布局管理器,【Android开发】布局管理器-表格布局

    在XML布局文件中定义表格布局管理器的基本语法: 属性列表 > 需要添加的UI组件 多个TableRow TableLayout支持的XML属性: android:collapseColumns ...

最新文章

  1. MySQL中对varchar类型排序问题的解决
  2. 京津冀计算机学科大学排名,2021京津冀地区大学排名!北师大第3,北航第7,人大不敌天大?...
  3. iOS中 UITableViewCell cell划线那些事 韩俊强的博客
  4. 操作篇 HYbrid的应用和学习
  5. c#异常处理_C#异常处理能力问题和解答 套装4
  6. xlwt设置excel字体、对齐方式、边框、颜色、背景色
  7. HTML5前端开发真的会被取代吗?
  8. 靠一杯茶融资160亿
  9. 360创始人周鸿祎曾这样告诫年轻人
  10. 电脑打开任务管理器的方法有哪几种
  11. windows环境下的YOLO3入门,及opencv344配置
  12. 深入理解JAVA集合系列二:ConcurrentHashMap源码解读
  13. 用Python弹奏周董的《菊花台》是什么效果
  14. 测评盘点2021十大淘宝购物优惠券app,高省是一个怎样的角色?
  15. 当我在浏览器输入 www.baiu.com 之后发生了什么
  16. 优矿 pandas plt 显示平安银行基金月最大召回率
  17. 本土战略 Ubuntu创始人宣布将发中国版
  18. 基于STM32F4:多通道ADC采集,采用DMA的形式,亲测有效
  19. 简单几步实现内网穿透
  20. 模拟集成电路笔记 | 第三部分 | Chapter 5-6

热门文章

  1. UniswapV2核心合约学习(3)——UniswapV2Pair.sol
  2. 作为电子攻城狮必须掌握的PADS常用快捷键(超全,记得收藏点赞,不然刷着刷着就找不到了)
  3. VSCode 带参数调试程序
  4. 《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.2 类图的基本知识
  5. 正宗港行诺基亚N70的极速鉴别方法
  6. Android 原生微博分享网络图片
  7. centos安装Fastdfs和Nginx并配置
  8. 【Android】Jcenter快速镜像
  9. ggplot2 标题:主、轴和图例标题
  10. Linux驱动实现AT指令,QT Linux实现AT指令处理框架