无法计算时差?

时间:2017-02-10 12:10:06

标签: android

屏幕关闭和屏幕开启时我有时间。

我在“text1”中屏幕关闭时间。 并在“text2”中获得屏幕时间。 现在我想计算屏幕关闭和屏幕之间的时差。

无法计算时差。

我想在“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;
        }
    }

}

2 个答案:

答案 0 :(得分:1)

1:

String string1 = "s";

无法解析为Date。你为什么不使用你存储的d和d1字段?

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

2:

  

public long getTime()返回自1月以来毫秒的数量   1,1970,00:00:00 GMT由此Date对象表示。

(大胆地强调)

您可以将时间差计算为以秒为单位。

尝试:

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

答案 1 :(得分:0)

附加我正在获得屏幕开/关时间的图像。和他们之间的时差。

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();


    }

}
相关问题