Heads Up Notification (setFullScreenIntent not work on Mate8)

本文仅记录在华为Mate8(Android 7.0)上Heads Up Notification的实现代码。至于为什么这么实现,由于时间缘故,原因尚未找到。如有同学指点,万分荣幸!

在Android5.0后,Notification开始支持Heads Up模式。该模式下,不需要下拉通知栏就直接显示出来 ,悬挂在屏幕上方,并且焦点不变,仍在用户操作的界面。因此,不会打断用户的操作,通知过几秒就会自动消失。最典型的应用是,微信的聊天消息通知。网络上对于这种模式的叫法很多,类似横幅通知,悬挂式通知等。

网上对于实现效果众说纷纭,大多倾向于调用NotificationCompat.Builder的方法

public Builder setFullScreenIntent(PendingIntent intent, boolean highPriority)

但在不同机器上,似乎实现效果也不尽相同。
在华为Mate8(Android 7.0)上,调用setFullScreenIntent反而无法实现Heads Up。
最终注掉setFullScreenIntent。核心代码如下。

Notification.Builder builder = new Notification.Builder(this);
Intent mIntent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0);
builder.setContentIntent(pendingIntent);//设置pendingIntent
builder.setSmallIcon(R.drawable.foldleft);
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.lanucher));
builder.setAutoCancel(true);
builder.setContentTitle("悬挂式通知");
builder.setPriority(Notification.PRIORITY_MAX);//设置最高权限
builder.setDefaults(Notification.DEFAULT_ALL);//设置声音和震动
notificationManager.notify(2, builder.build());

使用Heads Up Notification也有必要前提条件。
(1)Android API >=21,即5.0以上
(2)需要在设置中开启横幅通知权限(在设置通知管理中,不同机型可能存在差异)
(3)需要设置震动或声音。(必须!)
(4)需要设置Notification为最高权限。(必须!)

Android对于Notification的设计,个人感觉比较乱。在3.0前后的实现方式不同,且存在很多隐藏的必要条件未说明,可能是需要向前兼容的需求吧。

比如,普通的Notification有大小图标的设置。若不设置大图标,系统会自动使用APP图标,但如果不设置小图标,Notificatin将无法显示。

在解决问题过程中看过的LOG,增益良多,这里也一并记录。
《Heads up 让通知弹出来》http://blog.csdn.net/a376051132/article/details/61193102
《Android Notification 样式》https://www.2cto.com/kf/201605/510102.html
《android 特殊用户通知用法汇总–Notification源码分析》http://blog.csdn.net/self_study/article/details/51055769
Demo推荐github上的https://github.com/zhaozepeng/notification

需要特别吐槽的是,下面这篇文章。花了我3点CSDN积分下载DEMO,但DEMO中对notification未设置最高权限等级,未设置声音/震动,致使Heads Up效果无法展现
《Android5.x Notification应用解析》http://blog.csdn.net/itachi85/article/details/50096609

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值