【发布时间】:2016-02-09 00:23:45
【问题描述】:
在 Android Wear 中,使用 SensorManager 重复注册和取消注册 SensorEventListener 会导致 SensorManager 失败。我想知道是否有一种方法可以在每次加载片段时获取 SensorManager 的新实例。这样我就可以获得一个新的 SensorManager,注册我的侦听器,并在 Fragment 销毁时取消注册它们,然后取消引用该 SensorManager 并在下次加载 Fragment 时获取一个新的。
在我的片段中,我目前正在这样做:
@Override
public View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
// ...
mSensorMgr = (SensorManager) mMainWearActivity.getSystemService(Activity.SENSOR_SERVICE);
// ...
}
private void startListening(){
yGesture.setOnShakeListener(yListener);
xGesture.setOnShakeListener(xListener);
mSensorMgr.registerListener(yGesture, mSensorMgr.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_NORMAL);
mSensorMgr.registerListener(xGesture, mSensorMgr.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onResume(){
super.onResume();
startListening();
}
@Override
public void onPause(){
stopListening();
super.onPause();
}
private void stopListening(){
mSensorMgr.unregisterListener(yGesture);
mSensorMgr.unregisterListener(xGesture);
mSensorMgr = null;
}
我需要mSensorMgr = (SensorManager) mMainWearActivity.getSystemService(Activity.SENSOR_SERVICE); 来返回一个新实例,否则多次注册和注销监听器会使 SensorManager 失败。这可能吗?最好不必创建一个新的 Activity 并坚持使用片段。谢谢
编辑:
我已将使用 sensorManager 注册侦听器转移到 onResume(),但同样的问题仍然存在。这是 Android Wear 框架中的错误吗?
【问题讨论】:
-
为什么你不做 startListening();在
onResume()中,如果您在onPause()中执行 stopListening() ? -
@Boris_Treukhov OnCreateView() 在 Fragment 生命周期中的 onResume() 之前调用,所以我只是在创建视图后调用它,而不是接下来的几个方法。没有区别。
标签: android android-sensors sensormanager