gpt4 book ai didi

java - Android 多种实现 - 仅触发了一半事件

转载 作者:行者123 更新时间:2023-11-30 04:23:47 26 4
gpt4 key购买 nike

我用过:

public class MainGamePanel extends SurfaceView 
implements SurfaceHolder.Callback, SensorEventListener

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

是否有明显的原因?

最佳答案

您需要向系统的 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);

谷歌说:

Always make sure to disable sensors you don't need, especially when your activity is paused. Failing to do so can drain the battery in just a few hours. Note that the system will not disable sensors automatically when the screen turns off.

希望对你有帮助。如果没有,请四处浏览一下,因为有许多示例说明了如何为传感器事件设置监听器。

关于java - Android 多种实现 - 仅触发了一半事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8866427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com