我正在开发一款涉及使用加速度计来控制角色的游戏。我的问题是:我需要在 OnSensorChanged() 内部无法访问的类和方法中使用传感器接收到的值。我相信我需要从 OnSensorChanged 内部实现回调,但我不知道该怎么做。谁能帮我吗?
问问题
595 次
1 回答
0
我相信这篇文章中的答案(如何在 Android 中定义回调?)会帮助你。
总结一下,创建回调接口:
// The callback interface
interface MyCallback {
void callbackCall(SensorEvent event);
}
在应该进行计算的类中实现回调接口:
class Callback implements MyCallback {
void callbackCall(SensorEvent event) {
// callback code goes here
}
}
从您拥有 onSensoreChanged() 的 Activity 中拨打电话:
// The class that takes the callback
class Worker extends Activity implements SensorEventListener {
MyCallback callback;
public void onSensorChanged(SensorEvent event) {
callback.callbackCall(event);
}
}
我希望这有帮助。
更新:
我假设您已经了解进程和线程(如果不了解,请查看有关Processes and Threads的 Android 文档)。
onSensorChanged 方法是一个 I/O,最好在单独的线程(而不是主 UI 线程)中执行 I/O 操作。
调用回调方法后,您可以将事件存储在另一个变量中并在该类中使用这些局部变量。
由于您正在编写游戏,因此您的应用程序不太可能需要每个事件。因此,当应用程序忙于为您的游戏计算数据时,可以删除其他事件。您可以通过设置“忙碌”标志(布尔值)并在此 if 块中包含计算代码来做到这一点。
void callbackCall(SensorEvent event) {
if (!busy) {
// Set the busy flag to block other event changes
busy = true;
// callback code goes here
// Once finished, reset the busy flag to allow other events to come in
busy = false;
}
}
于 2013-03-10T20:57:34.767 回答