2016-06-16 4 views
0

вот код, который считывает данные с датчика акселерометра и датчика гироскопа. Я тестировал это приложение на многих устройствах Android, таких как samsung galaxy tab 2 или samsung dues или модели неба ... но не они показали мне данные гироскопа. Я уверен, что код в порядке, потому что все устройства показали мне данные о ускорении, но не данные для гироскопов. Может ли кто-нибудь мне помочь? Я знаю, что у этих устройств есть датчики гироскопа. то почему они не дают мне данные?Нет данных от датчика гироскопа

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

Может быть у вас есть подобная проблема, как this

Вы можете проверить, если датчик поддерживает (даже если его настоящее не может быть доступной для приложения)

Используйте что-то вроде этого:

boolean isAccelerometerSupported = sensorManager.registerListener (это, акселерометр, SensorManager.SENSOR_DEL AY_NORMAL);

boolean isGyroSupported = sensorManager.registerListener (это, гироскоп, SensorManager.SENSOR_DELAY_NORMAL);

Хотя я сам изо всех сил пытаюсь получить значения от акселерометра и гироскопа для устройств Samsung (гранд-премьер и S6). Я получаю все 0 значений с похожим кодом, как ваш.

Но тот же код дает ненулевые значения для устройства Moto g2. Поэтому я подозреваю, что обработка для устройств samsung отличается. Кроме того, я буду искать решение и дам вам знать, найду ли что-нибудь.

Для получения дополнительной информации обратитесь к документации по андроиду: https://developer.android.com/reference/android/hardware/SensorEvent.html