没有来自陀螺仪传感器的数据

时间:2016-06-16 08:43:06

标签: sensor gyroscope

这是一个从加速计传感器和陀螺仪传感器读取数据的代码。我已经在许多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

}

}

1 个答案:

答案 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