核心思想:
传统的PendingIntent只能跳转到一个页面,这样会有一个bug,就是假如你本来在activity1,然后点击通知跳转到activity1,界面会重新加载而且点击返回键会返回上一个没有修改的activity1,假如这个activity已经被修改,但是你点击了返回键就会回到之前那个,没有被修改的,这样有两个相同的activity会感觉很奇怪而且前一个activity可能是错误的,这样会产出bug。所以我们不能使用
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
应该使用
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), id1, clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
也就是可以使用广播来控制点击事件
1. 新建一个BroadCastReceiver类,并且在清单文件中注册!
<receiver
android:name=".NotificationClickReceiver">
</receiver>
public class NotificationClickReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//todo 跳转之前要处理的逻辑
}
}
2. 在你需要创建通知栏的地方
Intent clickIntent = new Intent(getApplicationContext(),NotificationClickReceiver.class); //点击通知之后要发送的广播
int id1 = (int) (System.currentTimeMillis() / 1000);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(),
id1, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
return new Notification.Builder(getApplicationContext(), id)
.setContentTitle(title)
.setContentText(content)
.setSmallIcon(android.R.drawable.stat_notify_more)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_ALL)
.setContentIntent(pendingIntent);
NotificationUtils notificationUtils = new NotificationUtils(this);
notificationUtils.sendNotification(title, info);