Notification works only for first time

528 views Asked by At

I have created a activity which got refreshes while a notification occurs but I am facing one problem which is that I got notification every time but my activity refreshes only first time or when I make my device unlocked. I am not able to refresh activity each time when I receive any notification.I have implemented broadcast inside activity.

Code for GCM IntentService class

  @Override
  protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
String msgg = intent.getStringExtra("message");

 final ResultReceiver receiver = intent.getParcelableExtra("receiver");
Bundle bundle = new Bundle();
if (!extras.isEmpty()) {

    if (GoogleCloudMessaging.
            MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {

        sendNotification(this, msgg);


    } else if (GoogleCloudMessaging.
            MESSAGE_TYPE_DELETED.equals(messageType)) {

        sendNotification(this, msg);
        updateMyActivity(this,msgg);
        bundle.putString("result", msg);
        receiver.send(STATUS_FINISHED, bundle);

    } else if (GoogleCloudMessaging.
            MESSAGE_TYPE_MESSAGE.equals(messageType)) {
        updateMyActivity(this,msgg);
        sendNotification(this, msg);



    }


    }

Send notification Code

         private void sendNotification(Context context, String message) {

Intent resultIntent;

int icon = R.mipmap.ic_launcher;
long when = System.currentTimeMillis();
NotificationCompat.Builder nBuilder;
Uri alarmSound = RingtoneManager
        .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);


NotificationCompat.BigPictureStyle notiStyle = new
        NotificationCompat.BigPictureStyle();
notiStyle.setBigContentTitle("afewtaps");
notiStyle.setSummaryText(message);


nBuilder = new NotificationCompat.Builder(context)
        .setSmallIcon(icon)
        .setContentTitle("afewtaps")
        .setStyle(new NotificationCompat.BigTextStyle().bigText(message))
        .setLights(Color.BLUE, 500, 500).setContentText(message)
        .setAutoCancel(true).setTicker("Notification from afewtaps")
        .setSound(alarmSound);



resultIntent = new Intent(context,
        LoginActivity.class);
resultIntent.putExtra("message", message);

resultIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);


PendingIntent resultPendingIntent = PendingIntent.getActivity(context,
        notify_no, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
// Show the max number of notifications here
if (notify_no < 9) {
    notify_no = notify_no + 1;
} else {
    notify_no = 0;
}
nBuilder.setContentIntent(resultPendingIntent);

NotificationManager nNotifyMgr = (NotificationManager) context
        .getSystemService(context.NOTIFICATION_SERVICE);



nNotifyMgr.notify(notify_no + 2, nBuilder.build());


      }

Send message to broadcast

            // This function will create an intent. This intent must take as parameter the "unique_name" that you registered your activity with
       static void updateMyActivity(Context context, String message) {

Intent intent = new Intent("unique_name");

//put whatever data you want to send, if any
intent.putExtra("message", message);

//send broadcast
context.sendBroadcast(intent);

}

this ends code for intent class.

now code of my activity

          @Override
         public void onResume() {
             super.onResume();
            // connectToDatabase();
             getActivity().registerReceiver(mMessageReceiver, new                                                IntentFilter("unoque_name"));

}

         //Must unregister onPause()
            @Override
          public void onPause() {
       super.onPause();
              getActivity().unregisterReceiver(mMessageReceiver);
               }


    //This is the handler that will manager to process the broadcast intent
     private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
     @Override
      public void onReceive(Context context, Intent intent) {

    // Extract data included in the Intent
    String message = intent.getStringExtra("message");

    //do other stuff here

    connectToDatabase();


}

};

1

There are 1 answers

1
theawless On

The notifications work because you are sending them through an IntentService which runs in the background.

You cannot use this method to change anything in the activity. This is so because the activity is not always running, it gets destroyed, it gets paused in its life cycle. Hence the corresponding receiver is also not running always.

One solution is that you can do the update in the IntentService and when the activity starts, you can reload in onResume().