gpt4 book ai didi

android - 关于android加速度计的onSensorChanged的信息

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:29 24 4
gpt4 key购买 nike

我想在安卓平台上写一个体感游戏。我将整个运动检测算法包含在 onSensorChanged() 函数中。问题是函数根据输入执行不同的时间。我对函数如何执行和调用有一些疑问:-

1) 如果我的函数执行了很长时间,发生了 2 个 onSensorChanged 事件,是同时调用还是只调用最新的一个?

2) onSensorChanged 函数是否在 Activity 线程以外的不同线程上运行?

3) onSensorcChanged 函数的多个实例是否在不同的线程上运行?变量访问是否有任何类型的同步?

4) 谁能告诉我在哪里可以找到有关 onSensorChanged() 或相关信息的任何详细信息?

5) 有没有什么办法可以让我先玩游戏一段时间,然后看看值是如何随时间变化的,以及函数的执行方式是如何不同的?

最佳答案

如果您能提供您正在使用的传感器类型,将会更有用。我假设它是 Sensor.TYPE_ORIENTATION

1) If my function executes for a long time that 2 onSensorChanged event occurs do both get called or only the latest one?

onSensorChanged 方法提供了一个事件对象(values 参数),特定传感器的值附加到该对象。对于 Sensor.TYPE_ORIENTATIONevent.values[0] 是 Azimuth,event.values[1] 是 Pitch, event.values[2] 是滚动。 Read the Android Developers SensorEvent page更好地理解这一点。上面的值更新得相当快,只有你处理这些值变化的方式决定了使用哪个值更新。例如,您可以根据事件值的更改方式不断更新您的 View 。

2) Does the onSensorChanged function run on different threads other than the activity thread?

它运行在一个不同的线程上,该线程依赖于它附加到的 Activity (该 Activity 要么实现了 SensorEventListener 接口(interface),要么包含一个从在 SensorEventListener 对象)。

3) Do multiple instance of onSensorcChanged function run on different threads? Is there any type of synchronization on the variable access?

我对此不太确定,但我想他们会在更新时同步 event 对象。是的,实现 SensorEventListener 接口(interface)的类的多个实例可以单独运行。

4) Can anyone point me to where i can find any detail information about onSensorChanged() or related information?

5) Is there any way i can first play the game for sometime and see how the values changed over tine and how the function executed differently?

您使用的是图形还是布局?如果您使用图形,

Activity 类:

public class YourActivity extends Activity {
MyView _view;
int sensorAccuracy;
SensorManager sensorManager;
SensorEventListener sensorListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
sensorAccuracy = accuracy;
}
public void onSensorChanged(SensorEvent event) {
//pass the values to view for display
_view.setOrientation(event.values[0],event.values[1],event.values[2]);
}
};
protected void onCreate(Bundle savedInstanceState) {
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(sensorListener,
sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_FASTEST);
_view = new MyView(this);
}
}

查看类

class MyView extends View() {
Context _context;
int _azimuth, _pitch, _roll;
public MyView(Context context) {
super(context);
_context = context;
}
public setOrientation(azimuth, pitch, roll) {
_azimuth = azimuth;
_pitch = pitch;
_roll = roll;
}
protected void onDraw(Canvas canvas) {
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLACK);
canvas.drawText("Azimuth: " + _azimuth + "Pitch: " + _pitch + "Roll: "
+ _roll, 10, 10, paint);
}
}

以上代码将在屏幕顶部显示包含更新值的文本。您会注意到这些值的更新非常频繁。同样,如果您正在使用布局,只需使用新的事件值更新 TextView 即可。

祝你好运!

关于android - 关于android加速度计的onSensorChanged的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5743271/

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