Как сохранить предыдущее значение в намерении дополнительно, когда приложение получило новое уведомление - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь получить уникальный идентификатор из ответа на сообщение firebase, когда я получаю уведомление, и сохраняю его с намерением, используя intent.putExtras. Проблема в том, что уникальный идентификатор, который я получил из первого уведомления, будет заменен новым идентификатором из второго уведомления. Есть ли обходной путь для решения этой проблемы? Уникальный идентификатор используется для открытия комнаты (деятельность).

FireBaseService.java

public class FirebaseService extends QiscusFirebaseService {
    private AppComponent component;
    @Override
    public void onMessageReceived(RemoteMessage message) {
        super.onMessageReceived(message);
        Log.d("msg", "onMessageReceived: " + message.getData().get("room_id"));
        //UNIQUE ID I TRY TO GET
        String roomId = message.getData().get("room_id");
        Random random = new Random();
        int m = random.nextInt(9999 - 1000) + 1000;
        Intent intent = new Intent(this, HomePageTabActivity.class);
        intent.putExtra("fromNotification", true);
        intent.putExtra("roomId", roomId);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        String channelId = "Default";
        NotificationCompat.Builder builder = new  NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(message.getData().get("title"))
                .setContentText(message.getData().get("body"))
                .setAutoCancel(true)
                .setContentIntent(pendingIntent);
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(channelId, "Default channel", NotificationManager.IMPORTANCE_DEFAULT);
            manager.createNotificationChannel(channel);
        }

        manager.notify(m, builder.build());
    }
    public AppComponent getComponent() {
        return component;
    }
}

HomePageTabActivity.java

@Override
    public void onNewIntent(Intent intent){
        this.setIntent(intent);
        Bundle extras = intent.getExtras();
        if(extras != null){
            if(extras.containsKey("fromNotification") || extras.containsKey("roomId")) {
                openChatRoom(Long.valueOf(extras.getString("roomId")));
            }else if(extras.containsKey("fromNotification") && extras.containsKey("roomId")){
                openChatRoom(Long.valueOf(extras.getString("roomId")));
            }else{
                Log.e("EXTRAS room",""+extras.getString("roomId"));
                Log.e("EXTRAS STATUS",""+extras.getBoolean("fromNotification"));
            }
        }else{
//            Toast.makeText(HomePageTabActivity.this,"Empty",Toast.LENGTH_SHORT).show();
        }
    }

public void openChatRoom(long roomId){
        Log.d("LONG ROOM",""+roomId);
        QiscusRxExecutor.execute(QiscusApi.getInstance().getChatRoom(roomId),
        new QiscusRxExecutor.Listener<QiscusChatRoom>() {
            @Override
            public void onSuccess(QiscusChatRoom qiscusChatRoom) {
                startActivity(GroupRoomActivity.
                        generateIntent(HomePageTabActivity.this, qiscusChatRoom));
            }
            @Override
            public void onError(Throwable throwable) {
                throwable.printStackTrace();
            }
        });
    }

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Проблема решена, я только изменил код запроса с 0 на уникальный номер. В моем случае я поставил номер комнаты в код запроса.

До:

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

После:

PendingIntent pendingIntent = PendingIntent.getActivity(this, Integer.valueOf(roomId), intent, PendingIntent.FLAG_UPDATE_CURRENT);
0 голосов
/ 10 января 2019

Жаль, что следующее может помочь.

Во-первых, попытайтесь использовать setAction для намерения присвоить уникальное значение, чтобы не было соответствующих PendingIntents.

    intent.setAction(Long.toString(System.currentTimeMillis()));

Во-вторых, установите флаг метода getActivity равным 0 вместо PendingIntent.FLAG_UPDATE_CURRENT.

PendingIntent.FLAG_UPDATE_CURRENT обновит дополнительные данные.

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
...