GeekyOmega GeekyOmega - 1 year ago 70
Android Question

How to update my notification to show my time counter changing?

I am almost finished with this toy app game I am making. It is giving me something to do while I have the flu. >_< So let me off on that technicality since I am asking a lot of questions lately.

My notification is always showing my counter to be 30000. Why isn't it timing down?

What I have done:
I have implemented a simple Service class and a custom timer to tick down. Eventually once I am sure the timer is working I will exit the entire game.

Here is my code that I wrote:

package com.example.redshirtmarblez;

import android.content.Context;
import android.content.Intent;
import android.os.CountDownTimer;
import android.os.IBinder;
import android.widget.Toast;

public class TimingService extends Service{

public long counter = 30000;
private Context ctx;
private Activity localActivity;

private NotificationManager nm;

public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;

public void onCreate()
nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
//Toast.makeText(this, "Timer is :" + counter, Toast.LENGTH_LONG).show();

public void getActivity(Activity activity)
localActivity = activity;

//count to end the game
public CountDownTimer timer = new CountDownTimer(30000, 1000){

public void onTick(long millisUntilFinished){
counter = millisUntilFinished / 1000;

public void onFinish(){
counter = 0;

//Kill the game
int i = android.os.Process.myPid();



* Show a notification while this service is running
public void declareNotification()
//Declare a new notification
Notification notification = new Notification(R.drawable.ic_launcher, "A New Notification", System.currentTimeMillis());

notification.flags |= Notification.FLAG_ONGOING_EVENT;
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;

Intent intent = new Intent(this, TimingService.class);
PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0);
notification.setLatestEventInfo(this, "herp", "counter: " + counter, activity);

//This is clearly not 1337, but a good joke
startForeground(1337, notification);



All this does when it runs is shows "A New Notification", and then changes to "herp counter: 30000". However, this notification never changes. It just stays 30000. Why? I thought I fixed this with making the flag ongoing?


Answer Source

counter is not a reference; the notification will not update with its new value until you explicitly tell it to.

Have a look at the documentation on updating an existing notification. Your ID is 1337 here, so you can use that to update it.

In fact, you may just be able to call declareNotification() again from your onTick() method... If this doesn't work, however, I would suggest keeping a reference to the Notification object (as a member variable), then updating it, and use nm.notify(1337, /* your notification object */);.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download