Question

I need to be able to start chronometer, then close activity, after that through notifications, back to that activity, and see the right time in chronometer.

What I've Done

A part of my Activity:

    public void doClick(View target)
   {
       switch(target.getId())
       {
           case R.id.buttonStart:
           {

               Mchronometer.setBase(SystemClock.elapsedRealtime());
               Mchronometer.start();
               Intent intent = new Intent(RecentActivity.this, ChronometerService.class);
               intent.putExtra("task_name",task_name);
               intent.putExtra("task_id",task_id);
               intent.putExtra("ellapsedTime",Mchronometer.getBase());
               Log.d("base",""+Mchronometer.getBase());
               startService(intent);
               break;
           }
           case R.id.buttonStop:
           {
               stopService(new Intent(RecentActivity.this, ChronometerService.class));
               Mchronometer.stop();
               Mchronometer.setBase(SystemClock.elapsedRealtime());
               break;

           }
           case R.id.button3:
           {

               break;
           }

       }
   }

A part of my Service:

    public class ChronometerService extends Service {

    private  ThreadGroup myThreads = new ThreadGroup("ServiceWorker");
    private NotificationManager notificationMgr;
    private int task_id;
    private long ellapsedTime;
    @Override
    public void onCreate() {
        super.onCreate();
        notificationMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        String task_name =intent.getExtras().getString("task_name");
        task_id =intent.getExtras().getInt("task_id");
        ellapsedTime = intent.getExtras().getLong("ellapsedTime");
        Log.d("servicebase",""+ellapsedTime);
        displayNotificationMessage(task_name);
        new Thread(myThreads, new ServiceWorker(),"ChronometerService").start();
        return START_STICKY;
    }
    private class ServiceWorker implements Runnable {

        public void run() {

        }

    }

    @Override
    public void onDestroy()
    {
        myThreads.interrupt();
        notificationMgr.cancelAll();
        super.onDestroy();
    }

    public IBinder onBind(Intent intent) {
        return null;
    }

    public void displayNotificationMessage(String message){
        Notification notification = new Notification(R.drawable.emo_im_winking,message,System.currentTimeMillis());
        notification.flags = Notification.FLAG_NO_CLEAR;
        Intent intent = new Intent(this, RecentActivity.class);
        intent.putExtra("task_id", task_id);
        intent.putExtra("ellapsedTime",ellapsedTime);
        Log.d("servicebase1",""+Long.toString(ellapsedTime));
        PendingIntent contentintent = PendingIntent.getActivity(this,0,intent,0);
        notification.setLatestEventInfo(this,"ChronometerService",message,contentintent);
        notificationMgr.notify(0, notification);
    }

}

I tried to send a message from activity to a service, which contains elapsed information. If I started it first on my device (after system load) it's works right, but when I launch it again. The activity receives wrong message. It receives the time of the first service launched on the device.

As you can see I also send one more variable, and activity reads it correctly.

Was it helpful?

Solution

I've found a solution to my question. It's simple. It's needed to use flag(PendingIntent.FLAG_UPDATE_CURRENT)

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

And it's work fine.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top