gpt4 book ai didi

Android加速度计采样率/延迟稳定

转载 作者:行者123 更新时间:2023-11-29 17:50:22 25 4
gpt4 key购买 nike

我正在尝试使用加速度计的数据和 onTouch 方法来检测敲击的力度。

据我所知,加速度计的最快采样频率是 200-202Hz,但在尝试匹配 onTouch 事件的时间戳和加速度计数据的峰值时,这种可变性给我带来了问题。

有没有办法稳定加速度计的读数来避免这个问题?比如控制特定线程之类的?

最佳答案

问题似乎是 java 代码在 android 中运行的 Dalvik JVM 优先处理进程,因此如果应用程序不如设备正在运行的任何其他东西重要,它会将其搁置少量。我发现解决此问题的一种方法是在 NDK 上使用 C 或 C++,它直接在操作系统上运行,不依赖于 JVM。这是我的 C++ 类的代码,您可以从 Java 调用它。

#include <jni.h>
#include <string.h>

#include <android/sensor.h>
#include <android/log.h>
#include <android/looper.h>

#define TAG "accelerondk"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)

#define LOOPER_ID 1


extern "C" {

void JNICALL Java_com_example_hellojni_PruebaHilo_startMonitoring(JNIEnv* env, jclass clazz) {
ASensorManager* sensorManager = ASensorManager_getInstance();

ALooper* looper = ALooper_forThread();
if(looper == NULL)
looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);

ASensorRef accelerometerSensor = ASensorManager_getDefaultSensor(sensorManager,ASENSOR_TYPE_ACCELEROMETER);
LOGI("accelerometerSensor: %s, vendor: %s", ASensor_getName(accelerometerSensor), ASensor_getVendor(accelerometerSensor));

ASensorEventQueue* queue = ASensorManager_createEventQueue(sensorManager, looper, LOOPER_ID, NULL, NULL);

ASensorEventQueue_enableSensor(queue, accelerometerSensor);
ASensorEventQueue_setEventRate(queue, accelerometerSensor, (1000L/200)*1000);

int ident;//identifier
int events;
while (1) {
while ((ident=ALooper_pollAll(-1, NULL, &events, NULL) >= 0)) {
// If a sensor has data, process it now.
if (ident == LOOPER_ID) {
ASensorEvent event;
while (ASensorEventQueue_getEvents(queue, &event, 1) > 0) {
LOGI("accelerometer X = %f y = %f z= %f ", event.acceleration.x, event.acceleration.y, event.acceleration.z);
}
}
}
}
}
}

此示例为您提供了一个 200Hz 的采样率,变化非常非常小(每秒给您一个或两个额外的读数),可以用代码消除。开始使用 NDK 的一个好方法是阅读这本书,Android Native Development Kit Cookbook。

https://www.packtpub.com/application-development/android-native-development-kit-cookbook

关于Android加速度计采样率/延迟稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302645/

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