发布
社区首页 >问答首页 >onSensorChanged()中的值不会存储在变量中

onSensorChanged()中的值不会存储在变量中
EN

Stack Overflow用户
提问于 2019-11-03 00:12:59
回答 1查看 92关注 0票数 0

我具有以下功能,用于监听acclerometer和magnetometer的值:

代码语言:javascript
代码运行次数:0
复制
  // Storage for Sensor readings
  public float[] mGravity = new float[3];
  public float[] mGeomagnetic = new float[3];

  public void registerSensors(Context context) {
        // First, get an instance of the SensorManager
        SensorManager sMan = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);

        // Second, get the sensor you're interested in
        Sensor magnetField = sMan.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

        // Get a reference to the accelerometer
        Sensor accelerometer = sMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        // Third, implement a SensorEventListener class
        SensorEventListener magnetListener = new SensorEventListener() {
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
                // do things if you're interested in accuracy changes
            }

            public void onSensorChanged(SensorEvent event) {
                mGravity = new float[3];
                //Log.i("LocationUpdater", "magnetometer updated");
                System.arraycopy(event.values, 0, mGravity, 0, 3);
                //Log.i("LocationUpdater", Float.toString(mGravity[0]));

            }
        };

        SensorEventListener accelListener = new SensorEventListener() {
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
                // do things if you're interested in accuracy changes
            }

            public void onSensorChanged(SensorEvent event) {
                mGeomagnetic = new float[3];
                //Log.i("LocationUpdater", "accelerometer updated");
                System.arraycopy(event.values, 0, mGeomagnetic, 0, 3);
            }
        };


        //mGravity[0] = 5;

        // Finally, register your listener
        sMan.registerListener(magnetListener, magnetField, SensorManager.SENSOR_DELAY_NORMAL);
        sMan.registerListener(accelListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);

        Log.i("LocationUpdater","Listeners registered");

    }

之后,我尝试在类中的另一个方法中访问mGravity

代码语言:javascript
代码运行次数:0
复制
  public double getUserDirection() {
        Log.i("LocationUpdater", Float.toString(mGravity[0]));
        if (mGravity != null && mGeomagnetic != null) {

            float rotationMatrix[] = new float[9];

        ...
  }

但是,从传感器读取的值不会写入数组,所有值都保持为0。为什么会这样呢?

所有的方法都是这样从另一个类调用的:

代码语言:javascript
代码运行次数:0
复制
 SensorUpdater updater = new SensorUpdater();
 updater.startBlukii(context);
 updater.registerSensors(context);
 double direction = updater.getUserDirection();
 Log.i(LOG_TAG, Double.toString(direction));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-05 22:48:52

我通过访问这样的变量解决了这个问题:侦听器中的LocationUpdater.mGravity,这似乎可以解决它。

代码语言:javascript
代码运行次数:0
复制
 public void onSensorChanged(SensorEvent event) {
                System.arraycopy(event.values, 0, LocationUpdater.mGravity, 0, 3);
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58672868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档