How to convert a program that uses SensorListener to SensorEventListener

泪湿孤枕 提交于 2019-12-04 17:16:08

I think this is what you need.

public class Compass extends Activity implements SensorEventListener {
  SensorManager sensorManager;
  static final int sensor = SensorManager.SENSOR_ORIENTATION;
  MyRose rose;
  private Sensor myCompassSensor;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Set full screen view
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    rose = new MyRose(this);

    setContentView(rose);

    // get sensor manager
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    // get compass sensor (ie magnetic field)
    myCompassSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
  }

  // register to listen to sensors
  @Override
  public void onResume() {
    super.onResume();
    sensorManager.registerListener(this, myCompassSensor, SensorManager.SENSOR_DELAY_NORMAL);
  }

  // unregister
  @Override
  public void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
  }

  // Ignore for now
  public void onAccuracyChanged(Sensor sensor, int accuracy) {
      // TODO Auto-generated method stub
  }

  public void onSensorChanged(SensorEvent event) {
      // this check is unnecessary with only one registered sensor
      // but it's useful to know in case you need to add more sensors
      if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
          int orientation = (int) event.values[0];
          rose.setDirection(orientation);
      }
  }
}

Edit: added check to determine sensor type

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!