2016-03-27 18 views
0

Ich habe eine App, wo ich die Sensoren für Beschleunigungsdaten abfragen und die XYZ-Werte in einer SQL DB speichern. Codewise es ist ziemlich einfach:Android lineare Beschleunigungsgenauigkeit

public void onSensorChanged(SensorEvent event) { 
     sensor = event.sensor; 

     int i = sensor.getType(); 
     if (i == MainActivity.TYPE_ACCELEROMETER) { 
      accelerometerMatrix = event.values; 
     } else if (i == MainActivity.TYPE_GYROSCOPE) { 
      gyroscopeMatrix = event.values; 
     } else if (i == MainActivity.TYPE_GRAVITY) { 
      gravityMatrix = event.values; 
     } else if (i == MainActivity.TYPE_MAGNETIC) { 
      magneticMatrix = event.values; 
     } 

     //insert into database 

    } 

MainActivity.TYPE_ACCELEROMETER ist nur ein Feld ich in meiner MainActivity Klasse.

Wenn ich dies auf Sensor.TYPE_LINEAR_ACCELERATION setze, merke ich, dass die Werte, die in meinem DB gespeichert werden, sind ziemlich niedrig in der Genauigkeit (nur 2 Dezimalstellen). Aber wenn ich den Hardware-Beschleunigungsmesser Sensor.TYPE_ACCELERATION verwende, dann ist die Genauigkeit viel höher (6dp)

Meine Frage ist, bin ich, die linearen Beschleunigungswerte falsch abzurufen, um mich zu veranlassen, nur 2dp der Genauigkeit zu erhalten? Oder ist das nur eine Einschränkung, wie die Sensoren in Android zusammengeschweißt werden? Wenn letzteres der Fall ist, wie bekomme ich nach dem Herausfiltern der Schwerkraft eine höhere Genauigkeit in meinen Beschleunigungsmesserwerten, wenn mit geschmolzenen Sensoren gearbeitet wird?

Antwort

0

Soweit ich weiß, können Sie die Genauigkeit der Hardware-Sensoren auf Android nicht ändern. Sie können die Abtastdauer nur mit registerListener() Methode von SensorManager Klasse oder Monitor Genauigkeit ändern mit onAccuracyChanged() Rückruf von SensorEventListener Schnittstelle.

Es sieht so aus, als würden Sie Sensormesswerte in Ihrem Code-Snippet korrekt abrufen.

Ich würde vorschlagen, die folgenden Dinge zu tun:

  • versuchen, die gleiche Messung mit nur einem Sensor und Prüfung durchzuführen, wenn das Anwendungsverhalten geändert hat - vielleicht mehrere Lesungen ist Messunsicherheit verursacht?
  • versuchen Sie, diese Anwendung auf einem anderen Gerät auszuführen, wenn Sie eines haben, und überprüfen Sie, ob sich das Verhalten und die Genauigkeit unterscheiden - möglicherweise ist die Genauigkeit der Sensoren auf verschiedenen Geräten unterschiedlich?
  • Kontrolle Genauigkeit und Datentypen in Ihrer Datenbank und überprüfen, ob es genauere Daten Griffe richtig

Wenn Sie einen Unterschied bemerkt nicht, nach dem erwähnten Vorschläge anwenden, denke ich, dass wir noch nichts Sensorwert Genauigkeit über die Erhöhung tun können.

Darüber hinaus habe ich einige Experimente mit Sensoren auf Android vor einiger Zeit mit Nexus 5 und Nexus 6 durchgeführt und ich sehe, dass verschiedene Sensoren unterschiedliche Genauigkeit hat, wie Sie auch bemerkt haben. Meiner Kenntnis nach können wir das auf Android-SDK-API-Ebene nicht kontrollieren.