私は、NDKでポーリング加速度計のチュートリアル/回答を検索しましたが、まだソルバーを見つけられませんでした。ちょうどアンドロイド開発者の文書hereが見つかりました。NativeActivityによるアクセス(高速ポーリング)加速度計NDK
私が必要とするのは、デフォルトでSENSOR_DELAY_FASTESTのデバイス(サムスンギャラクシーSL i9003とジンジャーブレッド2.3.5)のデフォルトで約100サンプル/秒(100Hz)のポーリング加速です。 は、したがって、私はsensor.hとlooper.hに基づいて作成してみてください.cファイルを生成することにより、NDKとNativeActivityを介してセンサにアクセスしようとしました:
#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サンプル)と記録されます。
私のコードに間違いがありますか?私は忘れてしまった何か?事前
この問題は解決しましたか? –