1

我在我的应用程序中使用运动传感器检测。

我的设计是这样的:一个类从主要活动中获取传感器服务引用,然后实现 SensorEventListener。也就是说,MainActivity 不会监听传感器事件的变化:

public void onCreate(Bundle savedInstanceState) {
    // ... code
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    // The following is my java class, it does not extends any android fragment/activty
    mShakeUtil = new ShakeUtil(mSensorManager,mAccelerometer,this);
    // ..more code..
}

不幸的是,我无法重新设计ShakeUtil,因此它既不是片段也不是活动。现在为了说明问题考虑:

  • MainActivity 即将被销毁/暂停。即屏幕旋转
  • ShakeUtil 的 onSensorChanged(SensorEvent event) 在此过程中被调用..

onSensorChanged 内部发生的一件事是对话交互,它给出了错误:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

当前一个发生在 MainActivity 的 onSaveInstanceState 和 onPause 之间时。我知道如果我成功检测到 MainActivity 正在 ShakeUtil 中暂停,则可以避免这种情况。

如何检测 MainActivity 正在暂停或从 ShakeUtil 调用 onSaveInstanceState?

或者,如何在不使 Shakeutil 扩展活动的情况下避免此问题?

到目前为止,我已经尝试过使用标志变量,但这还不够好,我猜这些不是原子操作。我尝试使用 Activity 的 isChangingConfigurations(),但我得到一个未记录的“NoSuchMethodFound”错误。我通过在主活动中的 onPause 时调用 ShakeUtil 来取消注册传感器

4

0 回答 0