您的位置:首页 > 移动开发 > Android开发

Heads Up Notification (setFullScreenIntent not work on Mate8)

2017-10-13 10:04 726 查看
本文仅记录在华为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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android通知 heads-up