センサーについて調べてみると、sensorlistener
(ここではコード内でmysensorlistener
) を使用してすべてのセンサーをデバイスに登録すると、必要なものが得られることがわかりました。リスナーをsensoreventlistener
(私のコードではmysensoreventlistener
) に変更すると、加速度計のデータしか取得できなくなります。
1つ登録するだけで、すべてのデータを取得できたのだろうかsensorevevtlistener
。
コードは次のとおりです。
package com.example.testaccelerometer;
import com.example.testaccelerometer.R;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class AccelerometerReader extends Activity {
TextView atvx;
TextView atvy;
TextView atvz;
TextView otvx;
TextView otvy;
TextView otvz;
SensorManager mySensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.disp);
atvx = (TextView)findViewById(R.id.atvx);
atvy = (TextView)findViewById(R.id.atvy);
atvz = (TextView)findViewById(R.id.atvz);
otvx = (TextView)findViewById(R.id.otvx);
otvy = (TextView)findViewById(R.id.otvy);
otvz = (TextView)findViewById(R.id.otvz);
mySensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
mySensorManager.unregisterListener(mySensorEventListener);
//mySensorManager.unregisterListener(aSensorEventListener);
//mySensorManager.unregisterListener(oSensorEventListener);
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
//mySensorManger.registerListener(mySensorListener, SensorManager.SENSOR_ALL,SensorManager.SENSOR_DELAY_FASTEST);
mySensorManager.registerListener(mySensorEventListener, mySensorManager.getDefaultSensor(Sensor.TYPE_ALL), SensorManager.SENSOR_DELAY_GAME);
//mySensorManager.registerListener(aSensorEventListener, mySensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
//mySensorManager.registerListener(oSensorEventListener, mySensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);
super.onResume();
}
/*private SensorListener mySensorListener = new SensorListener(){
public void onAccuracyChanged(int sensor, int accuracy) {
// TODO Auto-generated method stub
}
public void onSensorChanged(int sensor, float[] values) {
// TODO Auto-generated method stub
switch(sensor){
case SensorManager.SENSOR_ACCELEROMETER:
atvx.setText("X轴方向的加速度:" + values[0]);
atvy.setText("Y轴方向的加速度:" + values[1]);
atvz.setText("Z轴方向的加速度:" + values[2]);
break;
case SensorManager.SENSOR_ORIENTATION:
otvx.setText("X轴方向的角速度:" + values[0]);
otvy.setText("Y轴方向的角速度:" + values[1]);
otvz.setText("Z轴方向的角速度:" + values[2]);
}
}
};*/
private SensorEventListener mySensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float[] values1;
float[] values2;
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
values1 = event.values;
atvx.setText("X轴方向的加速度:" + values1[0]);
atvy.setText("Y轴方向的加速度:" + values1[1]);
atvz.setText("Z轴方向的加速度:" + values1[2]);
System.out.println("run....accele");
break;
case Sensor.TYPE_ORIENTATION:
values2 = event.values;
otvx.setText("X轴方向的角速度:" + values2[0]);
otvy.setText("Y轴方向的角速度:" + values2[1]);
otvz.setText("Z轴方向的角速度:" + values2[2]);
System.out.println("run....orien");
break;
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
/*
* test
*/
/*private SensorEventListener aSensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float[] values1;
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
values1 = event.values;
atvx.setText("X轴方向的加速度:" + values1[0]); //accelerometer
atvy.setText("Y轴方向的加速度:" + values1[1]);
atvz.setText("Z轴方向的加速度:" + values1[2]);
System.out.println("run....accele");
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};*/
/*private SensorEventListener oSensorEventListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float[] values1;
if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){
values1 = event.values;
otvx.setText("X轴方向的角速度:" + values1[0]); //orientation
otvy.setText("Y轴方向的角速度:" + values1[1]);
otvz.setText("Z轴方向的角速度:" + values1[2]);
System.out.println("run....orien");
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};*/
}
インターネットをサーフィンしていると、SensorEventListener は TYPE_ALL を使用してすべてのセンサーを登録することはできないが、それを使用してセンサーリストを取得できると言う人もいます。ここのコードのように:
// 注册加速度传感器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
// 注册磁场传感器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_FASTEST);
// 注册光线传感器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
SensorManager.SENSOR_DELAY_FASTEST);
// 注册方向传感器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_FASTEST);