gpt4 book ai didi

状态栏中带有一个图标的Android GCM多个推送通知

转载 作者:行者123 更新时间:2023-11-30 03:30:45 24 4
gpt4 key购买 nike

我的应用想要将多个推送通知 bundle 到状态栏中的一个图标中。

当点击图标时,应用程序应该接收到多个通知以 ListView 模式显示它们。

stackoverflow 中已经有一些条目接近我想要获得的内容,它确实让我更好地了解处理未决 Intent 和通知标志,但它们并没有完全解决我的问题。

第一步:创建通知

根据 stackoverflow 中的一些条目,我做出了以下假设:

  • 一个通知ID(notifyID)只获取状态栏一个图标
  • 待定 Intent 中的唯一 requestId 参数,用于区分同一通知 ID 内的各种通知请求
  • FLAG_ACTIVITY_NEW_TASK 用于通知 Intent ,FLAG_UPDATE_CURRENT 用于待定 Intent

     Notification notification;
    int icon = R.drawable.ic_launcher;
    int smallIcon = R.drawable.ic_launcher;
    int notifyID = 1;
    long when = System.currentTimeMillis();
    int requestID = (int) System.currentTimeMillis();

    NotificationManager notificationManager = (NotificationManager)
    context.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent notificationIntent = new Intent(context, NewActivity.class);

    notificationIntent.putExtra("new_message", message);

    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    PendingIntent contentIntent = PendingIntent.getActivity(context, requestID,
    notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    int numMessages = 1;
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
    mBuilder.setNumber(numMessages)
    .setSmallIcon(smallIcon)
    .setAutoCancel(true)
    .setContentTitle("You have " +numMessages+ " new messages.")
    .setContentText(message)
    .setWhen(when)
    .setContentIntent(contentIntent)
    .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);

    notificationManager.notify(notifyID, mBuilder.build());

在我看来,每次 GCM 发送通知时,我的应用程序都会生成一个通知以发送给通知管理器,同时考虑之前的假设。

第一个问题:如果我想通知用户剩余的未决通知数量,我如何才能跟踪之前发送的通知数量?我必须将其存储在存储介质中吗?

第二步:点击包含多个通知的状态栏中的通知图标:

   public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
showNotifications();
}

public void onResume() {
showNotifications();
super.onResume();
}


public void showNotifications() {

if (getIntent().getExtras() != null) {
if (getIntent().getExtras().getString("new_message") != null) {
String newMessage = getIntent().getExtras().getString("new_message");
if (!newMessage.equals("")) {
handleMessage(newMessage);
getIntent().removeExtra("new_message);
}
}
}
}

public void onNewIntent(Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
if (intent.getExtras().getString("new_message") != null) {
String newMessage = intent.getExtras().getString("new_message");
if (!newMessage.equals("")) {
intent.removeExtra("new_message"); }
}
}
}
}

第二个问题:我只收到最后发送的通知。似乎将未决 Intent 与 requestId 区分开来并不能解决问题。我还认为与一个通知图标相关的不同未决 Intent 将由 onNewIntent 处理......我正在考虑的一个可能的解决方案是将来自 GCM 的传入通知保存在存储中,并让它们在点击状态栏图标时出现,但可以肯定的是,这不是谷歌想要的方式......

¿有什么帮助吗?

最佳答案

第二步试试这个:PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

关于状态栏中带有一个图标的Android GCM多个推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17521908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com