Android多重实现 - 仅触发半个事件

时间:2012-01-14 23:57:59

标签: java android events

我用过:

public class MainGamePanel extends SurfaceView 
    implements SurfaceHolder.Callback, SensorEventListener

实现触摸事件和加速度计事件。使用@Override,我已经覆盖了触摸事件,并且它们正常工作。我没有从加速计事件中得到任何东西,比如onSensorChanged()

有明显的原因吗?

1 个答案:

答案 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);
谷歌说:

  

始终确保禁用您不需要的传感器,尤其是在何时   您的活动已暂停。如果不这样做可能会耗尽电池电量   只需几个小时。请注意,系统不会禁用传感器   屏幕关闭时自动显示。

希望能帮到你。如果没有,请浏览一下,因为有很多例子说明如何为传感器事件设置一个监听器。