android定义通知栏点击事件

核心思想:

传统的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);

这样就大功告成了,你可以在点击事件写自己的逻辑代码

发布了38 篇原创文章 · 获赞 7 · 访问量 8772

猜你喜欢

转载自blog.csdn.net/weixin_44617722/article/details/89946865