2016-11-22 3 views
1

Je fais une application qui enregistre les lectures de l'accéléromètre. Quand j'entre dans TYPE_ACCELEROMETER, il peut parfaitement enregistrer les données de l'accéléromètre brut. Cependant quand j'entre dans TYPE_LINEAR_ACCELERATION il ne renvoie aucune valeur. L'application ne me donne pas une erreur ou quitter. Je pense que je dois utiliser un périphérique qui ne prend pas en charge TYPE_LINEAR_ACCELERATION ou que je n'ai pas toutes les autorisations nécessaires dans mon manifeste.autorisations pour type_linear_acceleration

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout); 

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

     currentX = (TextView) findViewById(R.id.currentX); 
     currentY = (TextView) findViewById(R.id.currentY); 
     currentZ = (TextView) findViewById(R.id.currentZ); 


    } 

public void onSensorChanged(SensorEvent event) { 

      float x = event.values[0]; 
      float y = event.values[1]; 
      float z = event.values[2]; 


      currentX.setText(Float.toString(x)); 
      currentY.setText(Float.toString(y)); 
      currentZ.setText(Float.toString(z)); 

      try { 
       writer.write(x + "," + y + "," + z + "\n"); 
      } catch (IOException e) { 
       Log.e(LOG_TAG2, "failed"); 
      } 
     } 
    }; 
public void Recordbutton(View view) { 

     if (recordbuttonstatus) { 
      playBtn.setEnabled(true); 
      recordbuttonstatus = false; 
      startBtn.setText(getString(R.string.stoprecording)); 
      sensorManager.registerListener(accelListener, sensor, SensorManager.SENSOR_DELAY_NORMAL); 
    sensorManager.registerListener(accelListener, sensor, SensorManager.SENSOR_DELAY_NORMAL); 

      Thread accelerometerrecord = new Thread(new Runnable() { 

       @Override 
         public void run(){ 
       File accoutputFile = new File(Environment.getExternalStorageDirectory(), "accelerometervals.txt"); 
       try { 
        accoutputFile.createNewFile(); 
       } catch (IOException e){ 
        e.printStackTrace(); 
       } 
        try { 
         writer = new FileWriter(accoutputFile, false); /*When false, the file is overwritten, when true, the file is appended.*/ 
        } catch (IOException e) { 
         Log.e(LOG_TAG2, "failed"); 
        } 
       } 
      }); 

      accelerometerrecord.start(); 

} else { 
      startBtn.setText(getString(R.string.newrecording)); 
      recordbuttonstatus = true; 
      sensorManager.unregisterListener(accelListener); 

     } 
    } 

protected void onPause() { 
     super.onPause(); 

     sensorManager.unregisterListener(accelListener); 

     if (writer != null) { 
      try { 
       writer.close(); 
      } catch (IOException e) { 
       Log.e(LOG_TAG2, "failed"); 
      } 
     } 
    } 

public void onStop() { 
     super.onStop(); 
     sensorManager.unregisterListener(accelListener); 

     if (writer != null) { 
      try { 
       writer.close(); 
      } catch (IOException e) { 
       Log.e(LOG_TAG2, "failed"); 
      } 
     } 
    } 
+0

devrait peut-être confirmer ce qui est disponible en regardant la disponibilité des fonctionnalités en utilisant SensorManager apis – JoxTraex

+0

Vous pouvez vérifier la disponibilité du capteur à votre appareil en utilisant ce lien: http://stackoverflow.com/a/26054086/3819836 –

Répondre

0

Merci à tous. Il s'est avéré que mon téléphone n'avait pas le capteur d'accéléromètre linéaire.