下面来一段代码,引出今天的梗
1 | NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); |
上面的代码就是最基本的消息通知,然后启动相应的界面,现在世面上大多数也都是这么写的,但是最近却栽在这个坑上了,为啥这么说,因为当我们消息推送的时候在其他机型这样写都是OK的,唯独在华为上面,点击消息启动栏没有任何反应,也不闪退,也不给我们答案,就是通知状态没有了。纠结了一阵子,今天终于。。。。
我们先来看一下,作用于此事件的幕后黑手究竟是谁,上面的代码一目了然,PendingIntent.getActivity(Context context, int requestCode, Intent intent, int flags),nm.notify(0, mNotification);就是这两个方法在搞怪,我们来看看里面的参数,PendingIntent.getActivity)官方的解释是这样的
Retrieve a PendingIntent that will start a new activity, like calling Context.startActivity(Intent). Note that the activity will be started outside of the context of an existing activity, so you must use the Intent.FLAG_ACTIVITY_NEW_TASK launch flag in the Intent.
主要的意思就是使用PendingIntent来启动一个Activity,就像用Context.startActivity(Intent)来启动一个Activity一样,注意这里的activity将是上下文之外现有的activity,所以你必须使用Intent.FLAG_ACTIVITY_NEW_TASK标记位来启动一个intent。
这里面的第一个,第三个参数这里不打算细说了。
1 | * this PendingIntent should start context The Context in which |
摘自源码,当我们点进去getActivity方法时是这样的
1 | public static PendingIntent getActivity(Context context, int requestCode, |