He buscado un tutorial/una respuesta en el acelerómetro de sondeo más rápido con NDK pero todavía no he encontrado el solucionador. acabo de encontrar una documentación androiddevelopers here.acelerómetro de acceso (sondeo más rápido) a través de NativeActivity NDK
lo que necesito es una aceleración de sondeo de 100 muestras por segundo (100Hz), de manera predeterminada mi dispositivo (Samsung Galaxy SL i9003 con gingerbread 2.3.5) con SENSOR_DELAY_FASTEST predeterminado solo puede obtener 60 muestras de persecución (60Hz). Por lo tanto i intentó acceder sensor a través de NativeActivity con NDK mediante la generación .c archivos que trato de hacer en base a sensor.h y 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);
}
}
}
}
}
hasta ahora, he podido acceder a acelerómetro con NativeActivity, pero no hay cambios con el número de muestra que se tomó. incluso cuando cambio ASensorEventQueue_setEventRate lo suficientemente grande o pequeña, la aceleración registrada sigue siendo de alrededor de 60 muestras por segundo (1 muestra por 15 milisegundos)
¿Hay algún error en mi código? o algo con lo que me olvido?
gracias de antemano
ha resuelto este problema? –