Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update Push Notification Android

Tags:

android

I am implementing push notifications on Android. The problem comes when I want to update my notifications. I would like to stack up notifications so that if a notification is visible I simply update it and do this.

mNotifyBuilder.setContentText(currentText)
    .setNumber(++numMessages);

But every time I receive a notification ++numMessages is set back to 0 before being summed up. I need it to sum up from where it was left if there is a notification on the screen. Here is the code:

//Class is extending GcmListenerService
public class GCMPushReceiverService extends GcmListenerService {

    //variables for message 1,on receiving job applications
    String name;
    String lastname;
    String jobtypename;
    String kasualjobdatetimepostedat;
    String kasualjobcount;
    int numMessages;

    //This method will be called on every new message received
    @Override
    public void onMessageReceived(String from, Bundle data) {
        //Getting the message from the bundle
        String message = data.getString("message");
        String messageid = data.getString("messageid");

        if(messageid.compareTo("1")==0){
            name=data.getString("firstname");
            lastname=data.getString("lastname");
            jobtypename=data.getString("jobtype");
            kasualjobdatetimepostedat=data.getString("kasualjobdatetimepostedat");
        }
        else
        {
            kasualjobcount=data.getString("kasualjobcount");
        }
            //Displaying a notification with the message
        sendNotification(message, messageid);
    }

    //This method is generating a notification and displaying the notification
    private void sendNotification(String message,String messageid) {
        Intent intent = new Intent(this, Main_Activity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        int requestCode = 0;
        PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode, intent, PendingIntent.FLAG_ONE_SHOT);
        Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        Log.d("notificationid", String.valueOf(messageid));
        if(messageid.compareTo("2")==0) {//messages to do with jobs around 2
            String messageionkasualjobscount="There are "+kasualjobcount+" new jobs around you";
            NotificationCompat.Builder noBuilder = new NotificationCompat.Builder(this);
            noBuilder.setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("KasualJobs2")
                    .setContentText(messageionkasualjobscount)
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent).setSound(Settings.System.DEFAULT_NOTIFICATION_URI);

            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(2, noBuilder.build()); //messageid = ID of notification
        }else{//messages to with users applying for job 1

            String messageionkasualjobapplication=name+ " "+ lastname+" has applied for the "+jobtypename+" you posted on "+kasualjobdatetimepostedat;
            NotificationCompat.Builder noBuilder = new NotificationCompat.Builder(this);
            noBuilder.setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("KasualJobs1")
                    .setContentText(messageionkasualjobapplication)
                    .setAutoCancel(true).setNumber(++numMessages)
                    .setContentIntent(pendingIntent).setSound(Settings.System.DEFAULT_NOTIFICATION_URI);

            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(1, noBuilder.build()); //messageid = ID of notification

        }
    }

}
like image 533
Kimigx Avatar asked Oct 30 '22 21:10

Kimigx


1 Answers

In general, you should not expect your field values to persist across multiple calls to onMessageReceived, since the service might have been killed by the OS to free up memory.

I suggest storing your messages in a database. Whenever you receive a new message, insert it into the database, and delete it when the user reads it. Then you can easily query how many unread messages there are.

like image 149
Andrew Sun Avatar answered Nov 15 '22 07:11

Andrew Sun