Android 通知--判断通知是否有跳转

一. 从应用层来分析

在 Android 中,可以通过 PendingIntent 来实现有跳转的通知和没有跳转的通知的区别。具体来说,有跳转的通知会设置一个 PendingIntent,当用户点击通知时会触发该 PendingIntent,打开指定的界面或执行特定的操作;而没有跳转的通知则不设置 PendingIntent,用户点击通知时不会有任何操作。

复制代码
//1.创建一个有跳转的通知

//创建一个 Intent,用于处理用户点击通知时的操作
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// 创建一个有跳转的通知,通过setContentIntent()设置跳转
NotificationCompat.Builder builderWithIntent = new NotificationCompat.Builder(context, "channel_id")
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("有跳转的通知")
        .setContentText("点击将跳转到主界面")
        .setContentIntent(pendingIntent);

// 发送有跳转的通知
int notificationIdWithIntent = 1;
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(notificationIdWithIntent, builderWithIntent.build());


//2.创建一个没有跳转的通知

// 创建一个没有跳转的通知,不设置setContentIntent()
NotificationCompat.Builder builderWithoutIntent = new NotificationCompat.Builder(context, "channel_id")
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("没有跳转的通知")
        .setContentText("这是一个普通通知");

// 发送没有跳转的通知
int notificationIdWithoutIntent = 2;
notificationManager.notify(notificationIdWithoutIntent, builderWithoutIntent.build());

在上面的代码中,首先创建了一个有跳转的通知,并设置了一个 PendingIntent,用于处理用户点击通知时的操作。然后创建了一个没有跳转的通知,没有设置任何 PendingIntent。最后使用 NotificationManager 分别发送这两个通知。

通过这种方式,用户点击有跳转的通知时会打开指定的界面(比如 MainActivity),而点击没有跳转的通知时则不会有任何操作。

二 . 从系统层来分析

通过监听系统通知,可以得到系统通知接口返回的通知参数 StatusBarNotification sbn, 代码如下:

复制代码
 Notification notification = sbn.getNotification(); //获得一个Notification对象
  if (notification.contentIntent != null) {
            //有跳转通知,通知设置了PendingIntent
           
        }else {
          //无跳转通知

        }

通过判断通知中的contentIntent 是否为空来区分通知是否设置了跳转,contentIntent 类型为PendingIntent . 通知监听,可以参考监听系统收到的通知

相关推荐
陈大头铃儿响叮当42 分钟前
Android Studio升级后,Flutter运行android设备报错
android·flutter·android studio
勤劳打代码1 小时前
isar_flutter_libs 引发 Namespace not specified
android·flutter·groovy
奔跑吧 android2 小时前
【android bluetooth 协议分析 18】【PBAP详解 2】【车机为何不显示电话号码为空的联系人信息】
android·蓝牙电话·hfp·pbap·电话簿
深盾科技2 小时前
安卓二次打包技术深度拆解:从逆向篡改到防护逻辑
android
4Forsee2 小时前
【Android】消息机制
android·java·前端
2501_915921434 小时前
iOS 虚拟位置设置实战,多工具协同打造精准调试与场景模拟环境
android·ios·小程序·https·uni-app·iphone·webview
龚礼鹏4 小时前
Android 图像显示框架三——演示demo以及解析
android·交互
QuantumLeap丶4 小时前
《Flutter全栈开发实战指南:从零到高级》- 11 -状态管理Provider
android·flutter·ios
百锦再4 小时前
第6章 结构体与方法
android·java·c++·python·rust·go
gustt5 小时前
用小程序搭建博客首页:从数据驱动到界面展示
android·前端·微信小程序