1

我正在开发一款涉及使用加速度计来控制角色的游戏。我的问题是:我需要在 OnSensorChanged() 内部无法访问的类和方法中使用传感器接收到的值。我相信我需要从 OnSensorChanged 内部实现回调,但我不知道该怎么做。谁能帮我吗?

4

1 回答 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 回答