onSensorChanged() 未被调用



今晚我在传感器上遇到了很多麻烦,但似乎这是因为没有调用onSensorChanged()。很抱歉最终重复的问题,但我没有看到任何解决方案。这是我的代码:

public SensorManager manager;
public Sensor rotation_vector;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    manager = (SensorManager)getSystemService(SENSOR_SERVICE);
    rotation_vector = manager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
}
@Override
public void onSensorChanged(SensorEvent event) {
    int xValue = (int) event.values[0];
    int yValue = (int) event.values[1];
    int zValue = (int) event.values[2];
   Toast.makeText(getApplicationContext(),"this doesn't appear...",Toast.LENGTH_LONG);

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    //TODO: we'll see later about it
}
public void onPause() {
        /*Et on le dés-enregistre quand on sort de l'activité, pour économiser de la batterie*/
        super.onPause();
        manager.unregisterListener(this);
}
@Override
    protected void onResume() {
        /*On enregistre le sensor quand l'utilisateur revient sur l'activité*/
        super.onResume();
        manager.registerListener(this, rotation_vector, SensorManager.SENSOR_DELAY_NORMAL);
        if (null != rotation_vector) {
        } else {
            Toast.makeText(getApplicationContext(),
                    "There is no gyroscope on your device",
                Toast.LENGTH_LONG).show();
        }
    }

在不同的论坛上看到了很多类似的代码,但是从那里和其他一些没有解决方案的主题中分配,我还没有看到这样的问题......我必须在AndroidManifest中添加一些东西吗?这是一个常见的问题吗?它有一个解决方案?

谢谢托马斯(对不起,我的英语不好,我是法国人^^)

到目前为止,

我没有使用传感器,但看起来您已经获得了SensorManager但没有为应该发生的更改注册任何侦听器。问问自己怎么能onSensorChanged叫?

看看官方 android 教程网站上关于传感器的示例,您可以在onResume()方法中看到以下内容:

@Override
protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL);
}

也不要忘记研究整个页面,它可以为您提供很多帮助。

编辑:

我不得不复制粘贴您的来源,因为我没有看到任何问题。基本上有2种:

  • 吐司没有出现,因为你没有告诉他... Toast.show()将显示它。但您更愿意使用 Log 将更改输出到控制台。这取决于你
  • 不要在方法中将 float 重新键入 int onSensorChanged()因为所有值都是 0 或(如果幸运的话,为 1/-1)

所以结果如下:

@Override
public void onSensorChanged(SensorEvent event) {
    float xValue = event.values[0];
    float yValue = event.values[1];
    float zValue = event.values[2];
    Log.d(LOG_TAG, "x:"+xValue +";y:"+yValue+";z:"+zValue);
}

其他方法是正确的

您的设备可能没有Sensor.TYPE_ROTATION_VECTOR。您应该检查rotation_vector是否有null

最新更新