android sensor 框架分析---sensor native分析

来源:互联网 发布:网络教育如何报名 编辑:程序博客网 时间:2024/05/01 20:18

6,sensor native分析

获取sensor数据除了android上层进行开发之外,还可以直接进行native开发。

6.1 开发说明

初始化,

sensorManager = ASensorManager_getInstance(); //获取AsensorManager对象 //设置加速度的值accelerometer = ASensorManager_getDefaultSensor(sensorManager, ASENSOR_TYPE_ACCELEROMETER);  //获取Alooper对象looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);// 获取AsensorEventQueue对象accelerometerEventQueue = ASensorManager_createEventQueue(sensorManager, looper,            LOOPER_ID_USER, NULL, NULL);auto status = ASensorEventQueue_enableSensor(accelerometerEventQueue, accelerometer);//设置sensor的频率, SENSOR_REFRESH_PERIOD_US为 int值,单位为us。status = ASensorEventQueue_setEventRate(accelerometerEventQueue, accelerometer,        SENSOR_REFRESH_PERIOD_US);

获取一组sensor的值,sensor组的大小和频率有关。

ASensorEvent event;        float a = SENSOR_FILTER_ALPHA;        float x = (float)sensorDataFilter.x;        float y = (float)sensorDataFilter.y;        float z = (float)sensorDataFilter.z;        while (ASensorEventQueue_getEvents(accelerometerEventQueue, &event, 1) > 0) {            sensorDataFilter.x = a * event.acceleration.x + (1.0f - a) * sensorDataFilter.x;            sensorDataFilter.y = a * event.acceleration.y + (1.0f - a) * sensorDataFilter.y;            sensorDataFilter.z = a * event.acceleration.z + (1.0f - a) * sensorDataFilter.z;            LOGI("JNIresume update");        }

6.2 分析

代码路径如下,

/frameworks/base/native/android/

主要论述下设置sensor的参数值,例如设置频率, ASensorEventQueue_setEventRate的流程图,然后论述下获取数据的

ASensorEventQueue_getEvents详细流程。

6.2.1setEventRate分析

调用流程图如下,


6.2.2 getEvents分析

sensor.cpp的ASensorEventQueue_getEvents方法如下,

ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue,                ASensorEvent* events, size_t count){    ssize_t actual = static_cast<SensorEventQueue*>(queue)->read(events, count);    if (actual > 0) {        static_cast<SensorEventQueue*>(queue)->sendAck(events, actual);     }    return actual;}

直接调用SensorEventQueue的read方法读取管道中的数据,具体的流程和5.3小节完全一样。

原创粉丝点击