Ich möchte Beschleunigungssensor Daten, die in der Erdachse durch einen Service ist. Ich lese über einen Weg, es auch auf einem der Beiträge auf stackoverflow zu tun. Aber ich habe ein Problem.Schwerkraftsensor Zuhörer funktioniert nicht
@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();
}
}
}
Die if-Anweisung für Schwerkraftsensor vor Ort einen beliebigen Wert nicht zurück geändert, so dass die nächste Anweisung funktioniert auch nicht, wie gravityValues hat einen Nullwert.
Die Sensoren registriert sind
mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetsensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mGravity = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
Sie werden dann als
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);
ich ein Neuling in App-Entwicklung bin registriert, so würde jede mögliche Hilfe geschätzt.
Gravity available Toast erscheint auf dem Bildschirm, wenn ich diesen Code in meiner Anwendung versuchen. Irgendwelche anderen Vorschläge? –
Ja, ohne komplexe etwas zu tun, wenn Sie Werte von Schwerkraftsensor 'if (event.sensor.getType() == Sensor.TYPE_GRAVITY) { \t \t \t System.out.println ("X:" bekommen + event.values [0]); \t \t \t System.out.println ("Y:" + Ereignis.Werte [1]); \t \t \t System.out.println ("Z:" + Ereignis.Werte [2]); \t \t \t} ' – Thracian
Nicht sicher, aber wenn ich Linear_Acceleration-Sensor hinzugefügt, dann begann der Schwerkraftsensor Werte zu werfen. –