GravityTroubleshooting

Gravity sensor listener not working

userHead ManjotSnithcarl 2022-11-15 19:06:46 1103 Views2 Replies

I want to get accelerometer sensor data which is in earth axis through a service. I read about a way to do it as well on one of the posts on stackoverflow. But I have an issue.

@Override public void onSensorChanged(SensorEvent event) {    Toast.makeText(this, "Hollyy shiiitt",Toast.LENGTH_SHORT);    String acceldata = "";    float[] gravityValues = null;    float[] magneticValues = null;    if (event.sensor.getType() == Sensor.TYPE_GRAVITY) {        gravityValues = event.values.clone();        Toast.makeText(this, "The gra data is " + String.valueOf(gravityValues), Toast.LENGTH_SHORT);    }    if ((gravityValues != null) && (magneticValues != null)            && (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)) {        // float for use in conversion device relative acceleration to earth axis acceleration        float[] deviceRelativeAcceleration = new float[4];        deviceRelativeAcceleration[0] = event.values[0];        deviceRelativeAcceleration[1] = event.values[1];        deviceRelativeAcceleration[2] = event.values[2];        deviceRelativeAcceleration[3] = 0;        // Change the device relative acceleration values to earth relative values        // X axis -> East        // Y axis -> North Pole        // Z axis -> Sky        float[] R = new float[16], I = new float[16], earthAcc = new float[16];        SensorManager.getRotationMatrix(R, I, gravityValues, magneticValues);        float[] inv = new float[16];        android.opengl.Matrix.invertM(inv, 0, R, 0);        android.opengl.Matrix.multiplyMV(earthAcc, 0, inv, 0, deviceRelativeAcceleration, 0);        acceldata = String.valueOf(lat) + "," + String.valueOf(lon) + "," +  String.valueOf(speed)+","+ String.valueOf(earthAcc[0]) + "," + String.valueOf(earthAcc[1]) + "," + String.valueOf(earthAcc[2])+ "," + String.valueOf(event.values[0])+ "," + String.valueOf(event.values[1])+ "," + String.valueOf(event.values[2]);    }    //SDK  version check    if(Build.VERSION.SDK_INT > 18) {        File file;        FileWriter filew; // Internal Storage writing        try {            file = new File(getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS) + "/" + filename); //Android 4.4 and above            filew = new FileWriter(file, true); //true for append            filew.write(acceldata + String.valueOf(gravityValues) + String.valueOf(magneticValues) +      "\n");            filew.close();        } catch (Exception e) {            e.printStackTrace();        }    }    else{        String data = acceldata + "\n"  ;        try {            FileOutputStream fOut = openFileOutput("/" + filename,Context.MODE_APPEND);            fOut.write(data.getBytes());            fOut.close();            Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();        } catch (IOException e) {            e.printStackTrace();            Toast.makeText(getBaseContext(),"file not saved API < 19",Toast.LENGTH_SHORT).show();        }    } }

The if statement for gravity sensor on location changed doesn't return any value so the next statement also doesn't work as gravityValues has a null value.

The sensors registered are

mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mMagnetsensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); mGravity = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);

They are then registered as

int SamplingFrequency = 2 * 100000; // delay in microsecond. in this case 0.2 second sensorManager.registerListener(this, mAccelerometer,SamplingFrequency); sensorManager.registerListener(this, mMagnetsensor, SamplingFrequency); sensorManager.registerListener(this,mGravity,SamplingFrequency);

I am a newbie in app development so any help would be appreciated.

2022-12-23 12:32:20

Yes, without doing anything complex, check if you are getting values from gravity sensor if (event.sensor.getType() == Sensor.TYPE_GRAVITY) { System.out.println("X: " + event.values[0]); System.out.println("Y: " + event.values[1]); System.out.println("Z: " + event.values[2]); }

How can you be not sure. If you use the snippet and get x,y, and z values then there is nothing wrong with it, the next step is the track where you omit the values. If https://www.developerbook.net/ you are a newbie, strip the code to the core and check each step. Create sensormanger, https://chatrandom.download get gravity sensor from sensormanager, register it onResume and onSensorChanged check if you get the output from gravity sensor 

 

userHeadPic ManjotSnithcarl
2022-11-24 11:51:29

Please try the sample code in the product wiki.

userHeadPic jenna