user6313669
user6313669

Reputation: 365

Unable to calculate time difference?

I am getting time when screen off and screen on .

I am getting time when screen off in "text1". and getting time when screen on in "text2". Now i want to calculate time difference between screen off and screen on.

Unable to calculate time difference .

I want to show time difference in "text3".

MainActivity.java

  import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.Bundle;
    import android.text.format.DateFormat;
    import android.util.Log;
    import android.widget.TextView;

    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;

    public class MainActivity extends Activity {
        TextView text1,text2,text3;
        Date Date1,Date2;

        Date d,d1;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text1 = (TextView) findViewById(R.id.text1);
        text2 = (TextView) findViewById(R.id.text2);
        text3 =(TextView) findViewById(R.id.text3);
        Timer updateTimer = new Timer();
        updateTimer.schedule(new TimerTask()
        {
            public void run()
            {
                try
                {
                    String string1 = "s";
                    Date time1 = new SimpleDateFormat("HH:mm:ss ").parse(string1);
                    Calendar calendar1 = Calendar.getInstance();
                    calendar1.setTime(time1);

                    String string2 = "s1";
                    Date time2 = new SimpleDateFormat("HH:mm:ss ").parse(string2);
                    Calendar calendar2 = Calendar.getInstance();
                    calendar2.setTime(time2);
                    calendar2.add(Calendar.DATE, 1);

                    Date x = calendar1.getTime();
                    Date xy = calendar2.getTime();

                    long diff = x.getTime() - xy.getTime();

                    int Hours = (int) (diff/(  60 * 60));
                    int Mins = (int) (diff/(60)) % 60;


                    //System.out.println("diff hours" + diffHours);
                    String diff1 = Hours + ":" + Mins; // updated value every1 second
                    text3.setText( diff1);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }

        }, 0, 1000);

            // INITIALIZE RECEIVER
            IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_OFF);
            BroadcastReceiver mReceiver = new ScreeReceiver();
            registerReceiver(mReceiver, filter);

            // YOUR CODE
        }

        @Override
        protected void onPause() {
            // WHEN THE SCREEN IS ABOUT TO TURN OFF
            if (ScreeReceiver.wasScreenOn) {
                // THIS IS THE CASE WHEN ONPAUSE() IS CALLED BY THE SYSTEM DUE TO A SCREEN STATE CHANGE
                 d = new Date();
                 CharSequence s = DateFormat.format("hh:mm:ss", d.getTime());

               // d=format.parse(d);
               // s=d.getTime();

    ///Log.i(""+s);
                System.out.println("SCREEN TURNED OFF");
                text1.setText("SCREEN TURNED OFF" + s);
                Log.i("hi", "s"+s);
                //System.out.println("s");

            } else {
                // THIS IS WHEN ONPAUSE() IS CALLED WHEN THE SCREEN STATE HAS NOT CHANGED
            }
            super.onPause();
        }

        @Override
        protected void onResume() {
            // ONLY WHEN SCREEN TURNS ON
            if (!ScreeReceiver.wasScreenOn) {
                // THIS IS WHEN ONRESUME() IS CALLED DUE TO A SCREEN STATE CHANGE

                 d1 = new Date();
                CharSequence s1 = DateFormat.format("hh:mm:ss", d1.getTime());
                text2.setText("SCREEN TURNED ON" + s1);
                Log.i("hi", "s"+s1);
                // System.out.println("s");
                System.out.println("SCREEN TURNED ON");
            } else {
            }
            super.onResume();
        }

    }

ScreenReceiver.java

public class ScreeReceiver extends BroadcastReceiver {


    public static boolean wasScreenOn = true;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // DO WHATEVER YOU NEED TO DO HERE
            wasScreenOn = false;
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // AND DO WHATEVER YOU NEED TO DO HERE
            wasScreenOn = true;
        }
    }

}

Upvotes: 0

Views: 133

Answers (2)

user6313669
user6313669

Reputation: 365

Attaching image in which i am getting screen on/off time. and difference time between them.

enter image description here

public class MainActivity extends Activity {
    TextView text1,text2,text3;


    Date d,d1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text1 = (TextView) findViewById(R.id.text1);
        text2 = (TextView) findViewById(R.id.text2);
        text3 =(TextView) findViewById(R.id.text3);


        // INITIALIZE RECEIVER
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        BroadcastReceiver mReceiver = new ScreeReceiver();
        registerReceiver(mReceiver, filter);

        // YOUR CODE
    }

    @Override
    protected void onPause() {
        // WHEN THE SCREEN IS ABOUT TO TURN OFF
        if (ScreeReceiver.wasScreenOn) {
            // THIS IS THE CASE WHEN ONPAUSE() IS CALLED BY THE SYSTEM DUE TO A SCREEN STATE CHANGE

            d = new Date();
            CharSequence s = DateFormat.format("hh:mm:ss", d.getTime());

            System.out.println("SCREEN TURNED OFF");
            text1.setText("SCREEN TURNED OFF" + s);
            Log.i("hi", "s"+ s);


        } else {
            // THIS IS WHEN ONPAUSE() IS CALLED WHEN THE SCREEN STATE HAS NOT CHANGED
        }
        super.onPause();


    }

    @Override
    protected void onResume() {
        // ONLY WHEN SCREEN TURNS ON
        if (!ScreeReceiver.wasScreenOn) {
            // THIS IS WHEN ONRESUME() IS CALLED DUE TO A SCREEN STATE CHANGE

            d1 = new Date();
            CharSequence s1 = DateFormat.format("hh:mm:ss", d1.getTime());

            text2.setText("SCREEN TURNED ON" + s1);
            Log.i("hi", "s"+ s1);

            System.out.println("SCREEN TURNED ON");

            Timer updateTimer = new Timer();
            updateTimer.schedule(new TimerTask()
            {

                public void run()
                {
                    try
                    {

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {

                                //stuff that updates ui
                                long diff = d1.getTime() - d.getTime();

                                int Hours = (int) (diff/( 1000* 60 * 60));
                                int Mins = (int) (diff/(1000*60)) % 60;

                                Log.i("Difference ", ""+ diff);

                                String diff1= Hours + ":" + Mins; // updated value every 60 second
                                text3.setText( diff1 );
                                Log.i("Differ", "diff"+ diff1);
                            }
                        });

                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }

            }, 0, 600000);

        } else {
        }
        super.onResume();


    }

}

Upvotes: 0

reden
reden

Reputation: 1003

1:

String string1 = "s";

can't be parsed as a Date. Why don't you use the d and d1 fields you've stored?

long diff = d1.getTime() - d.getTime();

2:

public long getTime() Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.

(Bold my emphasis)

You calculate the time difference as if it were in seconds.

Try:

 int Hours = (int) (diff/(  60 * 60 * 1000));
 int Mins = (int) (diff/(60 * 1000)) % 60;

Upvotes: 1

Related Questions