上图是android系统架构图,从中可以得知,sensor必贯穿架构的各个层次。按照架构层次,下面从五个方面来分析sensor架构:

1. sensor架构之App层;

2. sensor架构之Framework层;

3. sensor架构之Libraries层;

4. sensor架构之HAL层;

5. sensor架构之Driver。

1. sensor架构之App层

下面以g-sensor为例,写一个简单的apk,看一下sensor在App层到底是如何工作的,一般需要下面四个步骤来实现一个sensor应用。

Step1:通过getSystemService获取sensor服务,其实就是初始化一个SensorManager实例;

 SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

Step2:通过SensorManager的getDefaultSensor方法获取指定类型的传感器的sensor对象;

 Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); // 重力感应

Step3:实现SensorEventListener接口的onSensorChanged和onAccuracyChanged方法;

 SensorEventListenerlsn = new SensorEventListener() {
public void onSensorChanged(SensorEvent e) {
//当传感器的值发生变化时,会执行这里
} public void onAccuracyChanged(Sensor s, int accuracy) {
//当传感器的精度变化时,会执行这里
}
};

Step4:通过SensorManager的registerListener方法注册监听,获取传感器变化值。

 mSensorManager.registerListener(lsn,sensor, SensorManager.SENSOR_DELAY_GAME);

注:当传感器的值发生变化时,会调用onSensorChanged方法;当传感器的精度变化时会调用onAccuracyChanged方法。

完整示例代码:

 public class main extends Activity {
private float x, y, z;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SensorManager mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
SensorEventListener lsn = new SensorEventListener() { public void onSensorChanged(SensorEvent e) {
System.out.println(e.value[0]);
System.out.println(e.value[1]);
System.out.println(e.value[2]);
}
public void onAccuracyChanged(Sensor s, int accuracy) {
}
};
mSensorManager.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);
}

android驱动程序之 - sensor的更多相关文章

  1. Android Sensor详解(1)简介与架构【转】

    本文转载自:https://blog.csdn.net/u013983194/article/details/53244686 最近在学习有关如何porting sensor的东西,仅借此机会写博客来 ...

  2. 【转】android camera(三):camera V4L2 FIMC

    关键词:android  camera CMM 模组 camera参数  CAMIF   V4L2  平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos ...

  3. 【转】android camera(一):camera模组CMM介绍

    关键词:android  camera CMM 模组 camera参数平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210)  作者:xubin ...

  4. android camera(一):camera模组CMM介绍【转】

    转自:https://blog.csdn.net/kevinx_xu/article/details/8821818 androidcmm图像处理工作手机三星 关键词:android  camera ...

  5. 如何在Android应用程序中使用传感器模拟器SensorSimulator

    原文地址; 如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET http://blog.csdn.net/pku_android/arti ...

  6. 如何在Android应用程序中使用传感器(OpenIntents开源组织SensorSimulator项目)

    原文地址http://blog.sina.com.cn/s/blog_621c16b101013ygl.html OpenIntents项目和可用资源介绍 [1].    项目介绍:OpenInten ...

  7. android camera(四):camera 驱动 GT2005

    摄像头主要参数: 1.MCLK  24MHz: 2.PCLK  48~52MHz~: 3.电压 1.8V(1.5V).2.8V: 4.scl(IIC时钟)100KHz或者400KHz. 下载:常用摄像 ...

  8. Android -- getSystemService

    Android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardServic ...

  9. android系统自带的Service原理与使用

    1. 说明 android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如 MountService监听是否有SD卡安装及移除,Clipboar ...

随机推荐

  1. OpenCV快速遍历矩阵元素方法

    OpenCV中Mat矩阵data数据的存储方式和二维数组不一致,二维数组按照行优先的顺序依次存储,而Mat中还有一个标示行步进的变量Step.使用Mat.ptr<DataTyte>(row ...

  2. [AngularJS] 'require' prop in Directive or Component

    When use 'require', recommend to add some error check, for example: class ChildCtrl { constructor(){ ...

  3. Jordan Lecture Note-4: Linear & Ridge Regression

    Linear & Ridge Regression 对于$n$个数据$\{(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)\},x_i\in\mathbb{R}^d,y ...

  4. Support Facades

    Support Facades Introduction Facades provide a "static" interface to classes that are avai ...

  5. JAVA 快递查询接口API调用-快递鸟接口

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  6. eclipse.ini配置eclipse的启动参数

    Eclipse的启动由$ECLIPSE_HOME/eclipse.ini控制,如果$ECLIPSE_HOME 没有被定义,则Eclipse安装目录下的默认eclipse.ini会生效. eclipse ...

  7. Android(java)学习笔记137:Android中SimpleAdapter,ArrayAdapter和BaseAdapter常见的适配器

    1.SimpleAdapter(BaseAdapter子类扩展类): simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片)等.可以显示比较复杂的列表, ...

  8. Android(java)学习笔记135:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  9. OC中字典:NSDictionary类是如何使用的

    字典就是关键字及其定义(描述)的集合.Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象).然后你就可以用这个关键字来 ...

  10. C语言---注释

    1.单行注释 //注释内容 2.多行注释 /*注释内容*/ 3.#if 0 注释内容 #endif 说明: 1.单行注释//不通用,有些编译器不支持 2.多行注释不能嵌套 3.#if 0 #endif ...