2016-11-22 8 views
1

Я делаю приложение, которое записывает показания с акселерометра. Когда я вхожу в TYPE_ACCELEROMETER, он может отлично записывать данные необработанного акселерометра. Однако, когда я вхожу в TYPE_LINEAR_ACCELERATION, он не может вернуть какие-либо значения. Приложение не дает мне ошибку или уходит. Я думаю, что я должен либо использовать устройство, которое не поддерживает TYPE_LINEAR_ACCELERATION, либо у меня нет всех необходимых разрешений в моем манифесте.разрешения для 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

должен подтвердить, что доступно, посмотрев на наличие функций с помощью SensorManager apis – JoxTraex

+0

Вы можете проверить доступность датчика на свое устройство по этой ссылке: http://stackoverflow.com/a/26054086/3819836 –

ответ

0

Спасибо всем. Оказалось, что у моего телефона не было линейного датчика акселерометра.