Нажмите на уведомления открывает только последний (последний получил) - PullRequest
1 голос
/ 31 октября 2019

Мне нужна помощь с уведомлениями на Android. Мой сервер отправил запрос (на сервер firebase) с уникальным идентификатором для нового уведомления. Если мое устройство получит его, новое уведомление будет создано и отправлено уведомление. Если я отправлю следующий запрос с другим уникальным идентификатором, будет создано новое уведомление. В строке состояния есть два уведомления. Каждое уведомление имеет некоторые данные в Intent, и я хочу показать их в Activity. Но после нажатия на первую или вторую или последнюю (если устройство получило 2 или более уведомлений), это вызывает запуск активности (с намерением) из последнего полученного (вершина стека уведомлений). Я думаю, что эта проблема в каком-то флаге по намерению или PendingIntent.

 @Override
public void onMessageReceived(RemoteMessage respose ) {

    JSONObject response_intent=null;

    try {
        response_intent= new JSONObject( respose.getData().get("intent"));
    } catch (JSONException e) {
        e.printStackTrace();
    }

    int unique_id=Integer.valueOf(respose.getData().get("id_original"));
    /*After notification click to open Activity ... */

    Intent intent = new Intent("eu.energochemica.cat_notifications.DETAIL_SCREEN");
    /*... with  data from firebase via Intent */

    intent.putExtra("fromNotification", true);
    intent.putExtra("intentFromNotification", respose.getData().get("intent"));
    intent.putExtra("id_original",unique_id);
    intent.putExtra("header",respose.getData().get("header"));
    intent.putExtra("text",respose.getData().get("text"));

    /*HERE? What FLAG to use?*        Intent.FLAG_ACTIVITY_NEW_TASK     */      
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    /*OR HERE? What FLAG to use?*/
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, Config.NOT_CHANNEL_ID)
            .setSmallIcon(this.getResources().getIdentifier("cat_logo_white", "drawable", this.getPackageName()))
            .setContentTitle(respose.getData().get("header"))
            .setContentText(respose.getData().get("text"))
            .setAutoCancel(false)
            .setChannelId(Config.NOT_CHANNEL_ID)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE+ "://" +this.getPackageName()+"/"+R.raw.notif))
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =   (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(unique_id, notificationBuilder.build());

}

Мне нужно (если я получил четыре уведомления в строке: 1, 2, 3, 4, где 4последний (самый новый)) , чтобы открыть действие с правильным намерением. (нажмите на уведомление 1 (самое старое) откроет Активность с намерением из этого уведомления 1 и не откроет Намерение из уведомления 4) .

Я не знаю, как ичто я должен делать с кодом, FLAG. Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 31 октября 2019

Боже мой ... Я обнаружил проблемное место ... Прочитав официальное описание PendingIntent.class Я попытался передать unique_id во второй параметр [ int requestCode ] в

PendingIntent.getActivity(this, u_id,  intent, ...

вместо

PendingIntent.getActivity(this, 0, intent, ...

, где константа 0 означает «переписывание» того же самого PendingIntent (на мой взгляд) => 0 было идентификатором для PendingIntent.

...