我用过:
public class MainGamePanel extends SurfaceView
implements SurfaceHolder.Callback, SensorEventListener
实现触摸事件和加速度计事件。使用@Override,我已经覆盖了触摸事件,并且它们正常工作。我没有从加速计事件中得到任何东西,比如onSensorChanged()
有明显的原因吗?
答案 0 :(得分:1)
您需要注册系统的SensorManager才能从任何传感器接收更新。关于如何执行此操作的一个非常基本的示例在SensorManager
的文档中给出。
步骤如下:
1)获取对系统SensorManager的引用以及您想要监听更新的传感器。在你的情况下,至少是加速度计。您需要从上下文请求SensorManager。由于您的MainGamePanel
扩展了SurfaceView,因此请使用getContext()
。
SensorManager mSensorManager = (SensorManager) getContext().getSystemService(Activity.SENSOR_SERVICE);
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
2)获得这些后,您需要注册您的课程以收听实际更新 - 这就是SensorEventListener进入图片的地方。您的SurfaceView实现了它,因此您应该能够按如下方式注册它:
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
3)实际上,您需要做的就是从硬件传感器开始接收更新。从此处开始,事件应该开始击中被覆盖的onSensorChanged()
方法。但是,您应该意识到,只要您不再主动使用/需要它们,就会释放系统资源。因此,不要忘记取消注册传感器更新。适当的地方是onPause()
或onStop()
来电。
mSensorManager.unregisterListener(this);
谷歌说:
始终确保禁用您不需要的传感器,尤其是在何时 您的活动已暂停。如果不这样做可能会耗尽电池电量 只需几个小时。请注意,系统不会禁用传感器 屏幕关闭时自动显示。
希望能帮到你。如果没有,请浏览一下,因为有很多例子说明如何为传感器事件设置一个监听器。