How to get time if some condition met like reading a gyroscope

I want to save the time as "dateString" when the gyro reading x = 0.0, y = 0.0, z = 0.0 and when x> 0.0 && & y> 0.0 && z> 0.0 save the time as "dateString1". I can’t time if the condition is met, because it takes the current time of my phone. It constantly works, so it is not possible to get the time when an event occurs, what is the solution for the same?

enter image description here

Example. If my phone is at rest, the gyro sensor will provide x = 0.0, y = 0.0, z = 0.0 if reading remains the same for three hours. Suppose this is the time that sleep begins. when the reading suddenly changes in terms of x, y, z, it will be the time of awakening.

( )?

x, y, z, 0,0,0,0,0,0 .

pic up x, y, z . , .

    import android.app.Activity;
    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.widget.TextView;

    import java.text.SimpleDateFormat;
    import java.util.Calendar;

   public class Main extends Activity {
    Dbhelper myDb;
    //variable for x,y,z
    TextView textX, textY, textZ;
Button ButtonView,ButtonAdd;
    TextView text1,text2,text3,text4 ;
    SensorManager sensorManager;
    Sensor sensor;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myDb =new Dbhelper(this);

        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

        textX = (TextView) findViewById(R.id.textX);
        textY = (TextView) findViewById(R.id.textY);
        textZ = (TextView) findViewById(R.id.textZ);
        text1 = (TextView) findViewById(R.id.text1);
        text2 = (TextView) findViewById(R.id.text2);
        text3 = (TextView) findViewById(R.id.text3);
        text4 = (TextView) findViewById(R.id.text4);
        ButtonView=(Button)findViewById(R.id.button_view);
        ButtonAdd=(Button)findViewById(R.id.button_add);
        AddData();
        viewAll();
    }




    public  void AddData() {
        ButtonAdd.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        boolean isInserted = myDb.insertData(text1.getText().toString(), textX.getText().toString(),
                                textY.getText().toString(),
                                textZ.getText().toString());
                        if (isInserted == true)
                            Toast.makeText(Main.this, "Data Inserted", Toast.LENGTH_LONG).show();
                        else
                            Toast.makeText(Main.this, "Data not Inserted", Toast.LENGTH_LONG).show();
                    }
                }
        );
}

    public void viewAll() {
        ButtonView.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Cursor res = myDb.getAllData();
                        if(res.getCount() == 0) {
                            // show message
                            showMessage("Error","Nothing found");
                            return;
                        }

                        StringBuffer buffer = new StringBuffer();
                        while (res.moveToNext()) {
                            buffer.append("ID :"+ res.getString(0)+"\n");
                            buffer.append("TIME :"+res.getString(1)+"\n");
                            buffer.append("X :"+ res.getString(2)+"\n");
                            buffer.append("Y :"+ res.getString(3)+"\n");
                            buffer.append("Z :"+ res.getString(4)+"\n\n");
                        }
                        // Show all data
                        showMessage("Data",buffer.toString());
                    }
                }
        );
    }

    public void showMessage(String title,String Message){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setCancelable(true);
        builder.setTitle(title);
        builder.setMessage(Message);
        builder.show();
    }

    public void onResume() {
        super.onResume();
        sensorManager.registerListener(gyroListener, sensor,SensorManager.SENSOR_DELAY_NORMAL);
    }

    public void onStop() {
        super.onStop();
        sensorManager.unregisterListener(gyroListener);
    }

    public SensorEventListener gyroListener = new SensorEventListener() {
        public void onAccuracyChanged(Sensor sensor, int acc) { }

        public void onSensorChanged(SensorEvent event) {
            long timeStamp = event.timestamp;
            double x = event.values[0];
            x=(double)Math.round(x * 10d) / 10d;
            //x=Math.round(2);
            double y = event.values[1];
            y=(double)Math.round(y * 10d) / 10d;
            double z = event.values[2];
            z=(double)Math.round(z * 10d) / 10d;

            textX.setText("X : " + x );
            textY.setText("Y : " + y );
            textZ.setText("Z : " + z );

            Calendar c2 = Calendar.getInstance();
            SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm:ss");
            String dateString1 =sdf1.format(c2.getTime());

            int timeOfDay = c2.get(Calendar.HOUR_OF_DAY);
            c2.getTime();




            Calendar c1 = Calendar.getInstance();

            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
            String dateString =sdf.format(c1.getTime());

            int timeOfDay1 = c1.get(Calendar.HOUR_OF_DAY);
            c1.getTime();



            if(timeOfDay >= 11 && timeOfDay <= 20 && x==0 && y==0 && z==0)

                text1.setText("phone is not moving" + dateString);

            else if

                (timeOfDay1 >= 11 && timeOfDay1 <= 20 && x>0 || y>0 || z>0)

                text2.setText("phone is just moved " + dateString1);


            else if(timeOfDay >= 11 && timeOfDay <= 20 )

            text3.setText("Were phone asleep between "+ dateString  + "&" + dateString1);

        }
    };
}

main.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >

    <TextView
        android:id="@+id/textX"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp" 
        android:text="" />
    <TextView
        android:id="@+id/textY"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp" 
        android:textSize="30sp" 
        android:text="" />
    <TextView
        android:id="@+id/textZ"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp" 
        android:textSize="30sp" 
        android:text="" />

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp"
        android:textSize="30sp"
        android:text="" />

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp"
        android:textSize="30sp"
        android:text="" />

    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20sp"
        android:textSize="30sp"
        android:text="" />
</LinearLayout>

. , , Timestamp - , .

+4
2

SensorEventListener SensorEvent event, , ,

long timeStamp = event.timestamp;

: event.timestamp .

EDIT: .

, , .

long lastTimeStamp = 0; .

SensorEventListener sensorEventListener = new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                float x = event.values[0];
                float y = event.values[1];
                float z = event.values[2];
                if(Math.round(x) == 0 && Math.round(y) == 0 && Math.round(z) == 0) {
                    //device didn't move - store current timestamp
                    lastTimeStamp = event.timestamp;
                } else {
                    //below if condition is to check if device hasn't been idle 
                    if (lastTimeStamp == 0) {
                        return;
                    }

                    //(3 * 60 * 60 * 1000) checks if device wasn't moved for more than 3 hours
                    if ((event.timestamp - lastTimeStamp) > (3 * 60 * 60 * 1000)) {
                        //code goes here 
                    }
                    lastTimeStamp = 0;
                }
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        };

, .

+2

sensor.timestamp getTime()

( , event.timestamp() not sensor.timestamp)

+1

Source: https://habr.com/ru/post/1665074/


All Articles