这是一个从加速计传感器和陀螺仪传感器读取数据的代码。我已经在许多Android设备上测试了这个应用程序,例如三星galaxy tab 2或三星会员或天空模型......但是他们没有向我展示陀螺仪数据。 我确定代码没问题,因为所有设备都向我显示了加速度数据但没有陀螺仪的数据。 谁能帮我?我知道这些设备有陀螺仪传感器。那么为什么他们没有给我数据?
public class MainActivity extends Activity implements SensorEventListener{
Sensor gyroscope;
Sensor acceleration;
SensorManager sm;
TextView gyro_text;
TextView acceleration_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
gyroscope = sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
sm.registerListener(this, gyroscope, SensorManager.SENSOR_DELAY_NORMAL);
gyro_text = (TextView) findViewById(R.id.gyro);
acceleration = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sm.registerListener(this, acceleration, SensorManager.SENSOR_DELAY_NORMAL);
acceleration_text = (TextView) findViewById(R.id.acceleration);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
acceleration_text.setText("X acc: "+event.values[0]+
"\tY acc: "+event.values[1]+
"\tZ acc: "+event.values[2]);
break;
case Sensor.TYPE_GYROSCOPE:
gyro_text.setText("X gyro: "+event.values[0]+
"\tY gyro: "+event.values[1]+
"\tZ gyro: "+event.values[2]);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:0)
您可能遇到与this
类似的问题您可以检查传感器是否受支持(即使应用程序可能无法访问该传感器)
使用类似的东西:
boolean isAccelerometerSupported = sensorManager.registerListener(this,accelerometer,SensorManager.SENSOR_DELAY_NORMAL);
boolean isGyroSupported = sensorManager.registerListener(this,gyroscope,SensorManager.SENSOR_DELAY_NORMAL);
虽然我自己很难从三星设备(Grand prime和S6)的加速度计和陀螺仪中获取数值。我得到的所有0值与你的代码相似。
但是相同的代码为Moto g2设备提供了非零值。所以我怀疑三星设备的处理方式不同。此外,我将寻找解决方案,如果我发现了什么,会通知您。
有关详细信息,请参阅Android文档:https://developer.android.com/reference/android/hardware/SensorEvent.html