- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在安卓平台上写一个体感游戏。我将整个运动检测算法包含在 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_ORIENTATION
,event.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/
这是我的职责。 public void onSensorChanged(SensorEvent event) { if (event.sensor.getType()
我有以下函数来监听加速度计和磁力计值: // Storage for Sensor readings public float[] mGravity = new float[3]; pub
我昨天刚开始使用 android 和 java,但遇到了问题。我正在尝试将传感器的值输出到某些 TextView。文本更新,但使用定义时设置的值。 onSensorChanged 应该更新这些值吗?
我正在开发一个可穿戴应用程序,我注意到一个奇怪的行为。我有一个类 FooService extends Service implements SensorEventListener 并且我重写了 on
我有一个 SensorEventListener,它在 onSensorChanged() 方法中执行如下操作: public void onSensorChanged(SensorEvent e){
我试图在 1 秒内获得 100 个加速度计读数,但它不是 100 个不同的读数,而是 100 次给出 1 个相同的读数。 当我按下应用程序中的按钮时,我尝试显示这 100 个加速度计读数 我的 Mai
我读过一些关于哪个线程调用各种回调方法的讨论,例如与传感器关联的回调方法。大多数声称 UI 线程调用回调 - 即使涉及单独的工作线程。我们确定吗? 考虑这种情况:一个单独的类实现 Runnable 和
今晚我在传感器方面遇到了很多麻烦,但似乎是因为没有调用 onSensorChanged()。很抱歉最终出现重复问题,但我没有看到任何解决方案。这是我的代码: public SensorManager
我正在编写 Android 应用程序,但在使用加速度计时遇到了一些问题。奇怪的是,我的函数 onSensorChanged() 没有被调用,我不知道为什么:/你能帮帮我吗? :) 这是我的代码: @S
我正在尝试开发一个检测跌倒的应用程序,到目前为止,跌倒的准确性在可接受的范围内,但问题是“OnSensorChanged”的调用过于频繁,导致 toast 不断出现在我的屏幕上. 我认为问题在于,在自
我需要在另一种方法中使用传感器的值。我不知道如何从 onSensorChanged() 方法获取值。 我尝试创建一个全局字段,在其中写入传感器值,但在 onSensorChanged() 方法之外该字
当我使用onSensorChanged()测试手机的加速度计时,发现它响应速度很快。几乎每1~3msonSensorChanged()就会被激活。我查了一些其他手机的信息,感觉有点奇怪,所以我怀疑我的
我是 Android 开发新手。我正在构建一个简单的 Android 应用程序,它分析加速计传感器数据并使用 MediaPlayer 播放声音。 SensorEventListener 实现代码:
当传感器打开时,onSensorChanged 上有数据 连续。 我想: 开启传感器 10 秒,每隔 10 秒读取一次数据。 关闭传感器 20 秒。 不断重复同一件事(步骤 1 到 2)。 我使用 S
我已经编写了一种通过网络发送 UDP 消息的方法。它工作正常。 在那之后,我尝试使用我的 Galaxy S 智能手机的加速计传感器。我得到了加速计值,并将它们显示在屏幕上。当值发生变化时(onSens
我将传感器用作 Sensor.TYPE_ACCELEROMETER。我正在按如下方式实现 OnSensorChanged() 方法: @Override public void onS
我正在使用传感器加速度计,我想知道它是否可能以及如何在 onSensorChanged 中运行两个东西。1. 我想将加速度计数据 x、y、z 始终存储在现场2. 如果检测到抖动,运行另一个 Activ
这是我的问题的后续:Android thread runnable performance 我在思考应用程序的同步方法时遇到了一些困难 我轮询传感器并在传感器值发生变化时将其存储到数组中 float[
只是想知道,有没有办法在 Android 手机上获取光传感器的值,而无需等待 onSensorChanged() 事件发生?为了节省电量,我在获得单个 lux 值后使用 registerListene
我需要检查移动设备是否处于水平位置(没有横向,我的意思是就像你把它放在 table 上一样)。 我知道我必须使用“SensorEventListener”接口(interface)和“onSensor
我是一名优秀的程序员,十分优秀!