simon peter
simon peter

Reputation: 39

Pass an object to another activity in notification builder when clicking a notification

Here there is an activity called grouchat. The messages are sent and received by gcmIntent class. In that class I have the code that issues the notification to the mobile.

In our app more than one event is there for groupchat. If I click the notification, it should take me to the right chat window, so I have passed the eventMO by putExtra parcelable. In the groupchat there is code to get a parcelable

The following is the code in groupchat activity:

eventMO = (EventMO) getIntent().getParcelableExtra("eventMo");
List<ChatMO> chatMOs = dbHelper.getGroupChatMessageForEvent(eventMO.getEventId());

The following code is in gcmIntend class to build the notification:

Intent groupChatActFrag = new Intent(getApplicationContext(), GroupChatActivity.class);
//here i have messageMO so i just set the eventid from messageMO to eventMO according to get the eventID in groupchat Activity
EventMO eventMO = new EventMO();
eventMO.setEventId(messageMO.getEventId());
groupChatActFrag.putExtra("eventMo", eventMO);
groupChatActFrag.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, groupChatActFrag, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
                        .setSmallIcon(R.drawable.ic_dialog_info)
                        .setContentTitle(messageMO.getEventTitle())
                        .setStyle(new NotificationCompat.BigTextStyle().bigText(messageMO.getfromUserName()))
                        .setContentText(messageMO.getMessage())
                        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

mBuilder.setContentIntent(contentIntent);

mBuilder.setAutoCancel(true);
Log.e("gcm","eventid"+messageMO.getEventId());

mNotificationManager.notify((int) (long) eventMO.getEventId(), mBuilder.build());

If I clicked the notification it throws a null pointer exception, because I get eventMO as null. Please tell me how to pass the current event id in GcmIntent class to groupchat activity.

Upvotes: 0

Views: 576

Answers (2)

TARAKAN
TARAKAN

Reputation: 76

I use this code in my projects

Notification

        Intent intent = new Intent(context.getApplicationContext(), MainActivity.class);
        intent.setAction(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(context.getApplicationContext(), id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        Notification notification = new NotificationCompat.Builder(context)//
                .setContentTitle(title == null ? context.getString(R.string.app_name) : title)//
                .setContentText(message)//
                .setStyle(new NotificationCompat.BigTextStyle().bigText(message))//
                .setSmallIcon(R.drawable.ic_launcher)//
                .setContentIntent(pendingIntent)//
                .setTicker(context.getString(R.string.app_name))//
                .build();

        notification.defaults |= Notification.DEFAULT_ALL;

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Service.NOTIFICATION_SERVICE);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notificationManager.notify(id, notification);

In Activity check intent in onCreate and onNewIntent

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    if (getIntent() != null) {
        checkIntent(getIntent());
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    checkIntent(intent);
}

private void checkIntent(Intent intent)
{
...
}

Upvotes: 1

waclaw
waclaw

Reputation: 433

You need change getEvent Id to id of notification.

int notification_id = 123;

notificationManager.notify(notification_id, notification);

Upvotes: 0

Related Questions