`

Android传感器

阅读更多
Android传感器

Android系统有很多传感器(Sensor),让Android应用更加丰富多样性,比如距离传感器,可应用于防止触屏手机以外挂断电话。磁力传感器可以作指南针使用。亮度传感器可以甄别环境光线亮度,随时调整自身屏幕亮度达到最佳效果。等等,还有很多。
从Sensor.java (frameworks\base\core\java\android\hardware)    这个文件中我们可以找到android2.0支持哪些传感器类型:
加速器   TYPE_ACCELEROMETER  = 1;
磁力域   TYPE_MAGNETIC_FIELD = 2;
方向     TYPE_ORIENTATION    = 3;
陀螺仪   TYPE_GYROSCOPE      = 4;
亮度     TYPE_LIGHT          = 5;
压力     TYPE_PRESSURE       = 6;
温度     TYPE_TEMPERATURE    = 7;
接近     TYPE_PROXIMITY      = 8;
通过SensorManager(SensorManager.java (frameworks\base\core\java\android\hardware))统一管理,实现传感器系统核心管理类
android.hardware.Sensor是单一传感器描述类
android.hardware.SensorEvent是传感器事件类
android.hardware.SensorEventListener传感器事件监听类
android.hardware.SensorListener直接读取Sensor而非Sensor事件,这样做可能带来一些弊端,还是有封装好的SensorEvent来完成吧

Framework层由Sensor ,SensorListener,SensorEvent ,SensorEventListener构成 ==>
JNI层由android_hardware_SensorManager.cpp (frameworks\base\core\jni) 构成 ==>
硬件层实现接口为Sensors.h (hardware\libhardware\include\hardware)

从下而上
Sensor HAL硬件抽象层
每种硬件模块都会有一个数据结构HAL_MODULE_INFO_SYM一般都是以hw_module_t开头,sensor的硬件模块数据结构定义在
struct sensors_module_t {
    struct hw_module_t common;
    /**
     * Enumerate all available sensors. The list is returned in "list".
     * @return number of sensors in the list
     */
    int (*get_sensors_list)(struct sensors_module_t* module,
            struct sensor_t const** list);
};

传感器的数据描述sensors_data_t
typedef struct {
     int             sensor;标识
    union {      
        sensors_vec_t   vector; /* sensor 矢量x,y,z */
        sensors_vec_t   orientation;//方向矢量
        sensors_vec_t   acceleration;//加速度米每秒每秒 (m/s^2)
        sensors_vec_t   magnetic;//磁力矢量in micro-Tesla (uT)
        float           temperature; //温度 (Celsius)
        float           distance;//距离 厘米
        float           light;//光的强度 lux
    };
    int64_t         time;//时间 nanosecond
    uint32_t        reserved;
} sensors_data_t;

Sensor的数据设备
struct sensors_control_device_t {
    struct hw_device_t common;
    native_handle_t* (*open_data_source)(struct sensors_control_device_t *dev);// sensors_data_device_t::open_data()的一个参数
    int (*close_data_source)(struct sensors_control_device_t *dev);
    int (*activate)(struct sensors_control_device_t *dev, int handle, int enabled);
    int (*set_delay)(struct sensors_control_device_t *dev, int32_t ms);
    int (*wake)(struct sensors_control_device_t *dev);
};

Sensor数据设备:
struct sensors_data_device_t {
    struct hw_device_t common;
    int (*data_open)(struct sensors_data_device_t *dev, native_handle_t* nh);
    int (*data_close)(struct sensors_data_device_t *dev);
    int (*poll)(struct sensors_data_device_t *dev,
            sensors_data_t* data);//返回sensor数据
};
   sensors_data_t数据结构中的数值,是最终传感器传出的数据,在传感器的硬件抽象层中,需要构建这个数据。
还有sensor的描述数据结构:sensor_t(sensor的描述,包括名称、版本、制造商、句柄,传感器类型、分辨率,最大值,功耗(mA)等

Sensor HAL具体实现可以参考emulator的代码Sensors_qemu.c(development\emulator\sensors)可以看到sSensorListInit是sensor_t的list
open_sensors()是具体实现

SensorManager主要是维护一个Sensor的列表,主要接口getDefaultSensor,getSensorList,registerListener,unregisterListener
Sensor的主要接口getMaximumRange,getName,getPower,getResolution,getType,getVendor,getVersion这些就是我们sensor_t结构的内容
SensorEvent很简单的,就只有Sensor,数值,精度和时间戳
SensorEventListener监听SensorEvent比如数值,精度的变化等

传感器的应用层使用:
可以参考这个自带的例子
SensorTest.java (development\samples\apidemos\src\com\example\android\apis\graphics)
分享到:
评论

相关推荐

    Android传感器开发与智能设备案例实战

    本书主要介绍Android传感器和外设的开发,共29章,主要包括Android开发技术基础、获取并编译源码、Android技术核心框架分析、Android传感器系统分析、使用地图定位、光线传感器详解、接近警报传感器详解、磁场传感器...

    ANDROID传感器开发.pdf

    ANDROID 传感器开发概述 Android 是一个面向应用程序开发的丰富平台,它拥有许多具有吸引力的用户界面元素、数据管理和网络应用等优秀的功能。Android 还提供了很多颇具特色的接口。本文我们将分别介绍这些吸引...

    Android传感器高级编程

    《Android传感器高级编程》是专为开发者深入理解并掌握Android平台上的传感器技术而编写的一本专业书籍。在Android系统中,传感器是设备与环境交互的关键组件,它们收集各种物理和环境数据,如加速度、陀螺仪、磁力...

    Android传感器高级编程 中文版 带书签 PDF

    《Android传感器高级编程》这本书是针对Android平台的传感器技术进行深入探讨的专业著作,旨在帮助开发者理解和利用Android系统中的传感器功能,提升应用的创新性和实用性。这本书由清华大学出版社出版,共481页,...

    android传感器使用方法

    "Android传感器使用方法" Android传感器是指安卓系统中用来感知外部环境、设备状态和用户行为的硬件组件。 Android系统提供了多种类型的传感器,包括动作传感器、环境传感器、姿态传感器等。下面将详细介绍Android...

    android 传感器

    通过Sensortest这个文件名,我们可以推测这是一个关于测试Android传感器的项目,可能包含了一些示例代码或测试脚本来演示如何使用Android传感器API。实际的项目中,可能会包含对不同传感器的测试用例,以及数据记录...

    android传感器高级编程源码+apk

    这个“android传感器高级编程源码+apk”资源正是针对这一主题,帮助开发者深入理解和实践Android传感器的高级用法。 首先,我们要理解Android传感器的基本概念。Android系统通过SensorManager服务提供了对各种...

    Android传感器、无线传输、与媒体硬件功能开发

    Android课程,蓝牙,android传感器,无线传输与媒体硬件功能开发

    Android 传感器高级编程高清中文pdf

    《Android传感器高级编程》利用你所需的知识和代码来武装你,帮助你很好地利用Android中的传感器。从确定智能手机的位置和解释物理传感器,到处理图像、音频和识别语音,你将学会如何有效地调用传感器相关的API。...

    利用android传感器实现手机摇一摇解除闹铃

    在Android平台上,我们可以利用内置的传感器系统来实现各种创新的功能,比如本文提到的"手机摇一摇解除闹铃"。这个功能允许用户在闹钟响起时,通过简单地摇动手机来停止闹铃,而无需触摸屏幕。接下来,我们将深入...

    极客学院Android传感器源码及PPT

    极客学院的Android传感器课程涵盖了多个方面的内容,包括蓝牙、照相机和NFC(近场通信)等核心功能的源码分析。通过学习这些源码,开发者可以深入理解Android系统如何与硬件交互,以及如何利用这些硬件功能来构建更...

    Android传感器应用实例

    "Android传感器应用实例"是一个专为学习Android传感器开发而设计的项目,通过两个具体的Activity,深入浅出地展示了如何利用Android的传感器API。 第一个Activity的主要目标是展示手机中的传感器数量和类型。在...

    Android传感器应用之摇一摇小球运动实现

    在Android平台上,传感器应用是移动开发的一个重要领域,它允许开发者创建各种有趣和实用的交互式功能。"摇一摇"动作就是一个常见的用户交互模式,常用于游戏、抽奖或者清理缓存等场景。本篇文章将深入探讨如何在...

    android传感器_android_

    在Android平台上,传感器技术是移动应用开发中的一个重要组成部分,它为开发者提供了与设备硬件交互的能力,从而实现各种创新的功能。本示例源码主要涵盖了三种常见的传感器:加速度传感器、方位传感器和光线传感器...

    android传感器总结

    以下是对"android传感器总结"这一主题的详尽解析。 一、Android传感器类型 Android系统支持多种传感器类型,包括: 1. **加速度传感器**(Accelerometer):测量设备在X、Y、Z轴上的线性加速度,通常用于识别设备...

Global site tag (gtag.js) - Google Analytics