Android – how to get time if some conditions encounter gyroscope reading

Invalid Sign

Example – if my phone is stationary, the gyro sensor will provide x = 0.0, y = 0.0, z = 0.0. If the reading is still the same within three hours. Suppose this is the start time of phone sleep. When the reading will suddenly change in X, y, Z, it will be the wake-up time

How do I detect this (sleep start time and wake-up time)?

The following code is to detect the gyro readings x, y and Z, which still display 0.0, 0.0 and 0.0 respectively

When the telephone values of PIC, x, y, Z increase, how can we add code to detect time, as described above

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

        }
    };
}

In 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>

Note: please do not tell me that timestamp is the solution I have tried

resolvent:

In the sensoreventlistener, you can use the callback parameter sensorevent event to obtain the timestamp using the following code,

long timeStamp = event.timestamp;

Note: event.timestamp will return long

Edit: update the answers based on your comments

To check if the device has moved for more than three hours, use the following code

Initialize long lasttimestamp = 0; In the global variable of your class

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) {

            }
        };

I hope this will be clearer

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>