나는 폴링 가속도계에 대한 학습서/답변을 NDK로 더 빨리 찾았지만 아직 해결 방법을 찾지 못했습니다. 방금 안드로이드 개발자 문서 here을 발견했습니다.NativeActivity NDK를 통한 액세스 (더 빠른 폴링) 가속도계
초당 100 샘플 (100Hz)의 폴링 가속이 필요합니다. 기본적으로 SENSOR_DELAY_FASTEST가 기본 인 내 장치 (진저 브레드 2.3.5가있는 삼성 Galaxy SL i9003)는 약 60 샘플 (60Hz) 만 수신 할 수 있습니다. 그러므로 나는 기반으로 만들려고 파일을이 .c 생성하여 NDK와 NativeActivity를 통해 센서에 액세스하려고 sensor.h 및 looper.h :
#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
#define SAMP_PER_SEC 100 //i've changed to 120, even 10, but nothing happen
void Java_azka_web_ndk_AcceleroNDKActivity_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/SAMP_PER_SEC)*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("aaaaaaa accelerometer X = %f y = %f z=%f ", event.acceleration.x, event.acceleration.y, event.acceleration.z);
}
}
}
}
}
지금까지, 내가와 가속도계에 액세스 할 수있었습니다 NativeActivity, 그러나 샘플 번호가 변경된 것은 없습니다. ASensorEventQueue_setEventRate를 충분히 크게 또는 작게해도 초당 약 60 샘플 (15 밀리 초당 1 샘플)이 기록됩니다.
내 코드에는 어떤 실수가 있습니까? 또는 내가 잊어 버린 무엇인가?
미리 감사드립니다.
이 문제는 해결 되었습니까? –