Android 浅谈Sensor工作流程(二)
来源:互联网 发布:客所思kx2a mac 编辑:程序博客网 时间:2024/05/16 10:09
转自http://www.apkbus.com/android-14020-1-1.html
另外还有一些唤醒和设置延迟的动作
java代码:
- if (mListeners.size() == 0) {
- _sensors_control_wake();
- }
- if (minDelay >= 0) {
- _sensors_control_set_delay(minDelay);
- }
java代码:
- private static native int _sensors_control_init();
- private static native ParcelFileDescriptor _sensors_control_open();
- private static native boolean _sensors_control_activate(int sensor, boolean activate)
- private static native int _sensors_control_set_delay(int ms);
- private static native int _sensors_control_wake();
frameworks/base/core/jni/android_hardware_SensorManager.cpp
先看一眼它的方法注册
java代码:
- static JNINativeMethod gMethods[] = {
- {"nativeClassInit", "()V", (void*)nativeClassInit },
- {"sensors_module_init","()I", (void*)sensors_module_init },
- {"sensors_module_get_next_sensor","(Landroid/hardware/Sensor;I)I",(void*)sensors_module_get_next_sensor },
- {"sensors_data_init", "()I", (void*)sensors_data_init },
- {"sensors_data_uninit", "()I", (void*)sensors_data_uninit },
- {"sensors_data_open", "(Ljava/io/FileDescriptor;)I", (void*)sensors_data_open },
- {"sensors_data_close", "()I", (void*)sensors_data_close },
- {"sensors_data_poll", "([F[I[J)I", (void*)sensors_data_poll },
- };
- sensors_data_open(JNIEnv *env, jclass clazz, jobject fdo){
- jclass FileDescriptor = env->FindClass("java/io/FileDescriptor");
- jfieldID offset = env->GetFieldID(FileDescriptor, "descriptor", "I");
- int fd = env->GetIntField(fdo, offset);
- return sSensorDevice->data_open(sSensorDevice, fd); // doesn't take ownership of fd
- }
java代码:
- static sensors_data_device_t* sSensorDevice = 0;
java代码:
- static JNINativeMethod gMethods[] = {
- {"_sensors_control_init", "()I", (void*) android_init },
- {"_sensors_control_open", "()Landroid/os/ParcelFileDescriptor;", (void*) android_open },
- {"_sensors_control_activate", "(IZ)Z", (void*) android_activate },
- {"_sensors_control_wake", "()I", (void*) android_data_wake },
- {"_sensors_control_set_delay","(I)I", (void*) android_set_delay },
- };
java代码:
- android_activate(JNIEnv *env, jclass clazz, jint sensor, jboolean activate){
- int active = sSensorDevice->activate(sSensorDevice, sensor, activate);
- return (active<0) ? false : true;
- }
java代码:
- static sensors_control_device_t* sSensorDevice = 0;
java代码:
- struct sensors_control_device_t {
- struct hw_device_t common;
- /**
- * Returns the fd which will be the parameter to
- * sensors_data_device_t::open_data().
- * The caller takes ownership of this fd. This is intended to be
- * passed cross processes.
- *
- * @return a fd if successful, < 0 on error
- */
- int (*open_data_source)(struct sensors_control_device_t *dev);
- /** Activate/deactivate one sensor.
- *
- * @param handle is the handle of the sensor to change.
- * @param enabled set to 1 to enable, or 0 to disable the sensor.
- *
- * @return 0 on success, negative errno code otherwise
- */
- int (*activate)(struct sensors_control_device_t *dev,int handle, int enabled);
- /**
- * Set the delay between sensor events in ms
- *
- * @return 0 if successful, < 0 on error
- */
- int (*set_delay)(struct sensors_control_device_t *dev, int32_t ms);
- /**
- * Causes sensors_data_device_t.poll() to return -EWOULDBLOCK immediately.
- */
- int (*wake)(struct sensors_control_device_t *dev);
- };
- struct sensors_data_device_t {
- struct hw_device_t common;
- /**
- * Prepare to read sensor data.
- *
- * This routine does NOT take ownership of the fd
- * and must not close it. Typically this routine would
- * use a duplicate of the fd parameter.
- *
- * @param fd from sensors_control_open.
- *
- * @return 0 if successful, < 0 on error
- */
- int (*data_open)(struct sensors_data_device_t *dev, int fd);
- /**
- * Caller has completed using the sensor data.
- * The caller will not be blocked in sensors_data_poll
- * when this routine is called.
- *
- * @return 0 if successful, < 0 on error
- */
- int (*data_close)(struct sensors_data_device_t *dev);
- /**
- * Return sensor data for one of the enabled sensors.
- *
- * @return sensor handle for the returned data, 0x7FFFFFFF when
- * sensors_control_device_t.wake() is called and -errno on error
- *
- */
- int (*poll)(struct sensors_data_device_t *dev,
- sensors_data_t* data);
- };
java代码:
- /** convenience API for opening and closing a device */
- static inline int sensors_control_open(const struct hw_module_t* module,
- struct sensors_control_device_t** device) {
- return module->methods->open(module,
- SENSORS_HARDWARE_CONTROL, (struct hw_device_t**)device);
- }
- static inline int sensors_control_close(struct sensors_control_device_t* device) {
- return device->common.close(&device->common);
- }
- static inline int sensors_data_open(const struct hw_module_t* module,
- struct sensors_data_device_t** device) {
- return module->methods->open(module,
- SENSORS_HARDWARE_DATA, (struct hw_device_t**)device);
- }
- static inline int sensors_data_close(struct sensors_data_device_t* device) {
- return device->common.close(&device->common);
- }
- Android 浅谈Sensor工作流程(二)
- Android 浅谈Sensor工作流程(一)
- Android Sensor工作流程(一)
- android中Sensor 工作流程
- android中Sensor 工作流程
- android中Sensor 工作流程
- Android传感器Sensor工作流程
- android中Sensor 工作流程
- sensor工作流程
- Lighting sensor 工作流程
- G-Sensor工作流程
- Android Sensor流程
- android Sensor相关工作
- android-5.0 sensor工作原理—sensorservice的启动(二)
- Android传感器---Motion Sensor(二)
- Android传感器---Position Sensor(二)
- Android传感器---Motion Sensor(二)
- Android传感器---Position Sensor(二)
- android中Sensor 工作流程
- Cocos2d-x2.0 RotateWorldTest深入分析
- [Android实例] Sensor传感器源码的阅读与应用开发简单实例
- Android 浅谈Sensor工作流程(一)
- 消失的子弹
- Android 浅谈Sensor工作流程(二)
- Android中G-Sensor相关流程
- Andriod Sensor HAL实现
- MATLAB 3D 动画制作(一)- 3D 图形设计
- 浅谈小型网游服务器端技术架构成本分析
- Sensor Framework原理
- 网站用户行为分析在用户市场领域的应用
- 阅读android有关sensor的源码总结
- Android之Sensor 简介