2016-11-22 5 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

ありがとうございます。私の携帯電話にはリニア加速度センサーがないことが判明しました。

関連する問題