首先找资料,了解安卓传感器主要分为三种
动作传感器:加速传感器,重力传感器,陀螺仪传感器,旋转向量传感器
环境传感器,光线传感器,温度传感器(据说还有大气压传感器)
位置传感器:方向传感器,磁场传感器
其中这些传感器又分为硬件传感器和软件传感器!所谓硬件传感器就是纯粹基于手机硬件获取的数据
而软件传感器并不是真实存在,而是基于硬件传感器基于一系列算法产生的伪传感器,比如方向传感器就是基于距离传感器和磁场传感器经过这两个传感器一系列算法得出!
在安卓开发中,已经提供了传感器的API就是
1 SensorManager类,该类是用来注册,监听,销毁监听器的方法,以及获取传感器数量种类精度等方法
2 Sensor类是提供了传感器的信息比如传感器的类型,版本,制造商等等比如常见的SensorType类型
序号传感器Sensor类中定义的TYPE常量1加速度传感器TYPE_ACCELEROMETER2温度传感器TYPE_AMBIENT_TEMPERATURE3陀螺仪传感器TYPE_GYROSCOPE4光线传感器TYPE_LIGHT5磁场传感器TYPE_MAGNETIC_FIELD6压力传感器TYPE_PRESSURE7临近传感器TYPE_PROXIMITY8湿度传感器TYPE_RELATIVE_HUMIDITY9方向传感器TYPE_ORIENTATION10重力传感器TYPE_GRAVITY11线性加速传感器TYPE_LINEAR_ACCELERATION12旋转向量传感器TYPE_ROTATION_VECTOR
3 SensorEventListener接口,主要就是传感器开发的监听回调,传感器的数值发生变化时就会调用这个方法
4 SensorEvent类是回调监听的参数,主要封装了传感器的监听数值(以数组形式存在)
这个就是传感器开发会用到的主要API,话说查了不少资料...
待会后面的一些内容是我这次项目开发用不到的,但是为了考虑以后会遇上,我就一并记录在这里了,这样之后在进行传感器开发,我不用再去查资料了,直接看我这篇帖子就囊括了大部分的资料
然后是我们要确定传感器的开发流程
1创建传感器管理类,
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
2选择项目开发中会遇到的传感器(最好打印出列表看手机支持那些传感器,主要用来看手机支持那些传感器,实际开发不需要这行代码)
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);//主要用来看看手机支持哪些传感器,可以不写
3注册你要监听的传感器监听器,实现监听方法
我的项目经过我的测试实际用到的是方向传感器
//方向传感器 mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_UI);
这里要注意了,要为了用户负责,注册了就要反注册,否则传感器可是耗电大户,我们一般在onResume注册监听,在onPause进行解绑
mSensorManager.unregisterListener(this);
这里介绍下监听器的三个参数
registerListener(参数一,参数二,参数三)
参数一就是监听回调对象,实现这个接口,编译器会自动复写这两个方法,我们下面再介绍这两个方法
参数二你需要监听的传感器类型
参数三 传感器获取数值的模式,你可以理解成传感器监听周围变化块慢,这个参数是一个常量,一般有四种
SENSOR_DELAY_FASTEST 最快,耗电大户 ,监听的越快耗电量越大,这种模式一般不建议使用,因为监听周围大量的数据,算法如果不好将会影响游戏逻辑以及UI性能
SENSOR_DELAY_GAME 一般用来开发游戏,用于实行性较高的游戏比如一些赛车游戏,游戏开发建议用这个模式
SENSOR_DELAY_NORMAL 默认的平率,对于一般的益智类游戏使用,比如根据重力来调整小球进洞的小游戏,如果这个模式应用在赛车游戏上,采样率太低会导致跳帧
SENSOR_DELAY_UI 根据传感器更新UI,我们一般根据传感器的值变化用来绘制我们相应的UI,延迟一点反而好不用平凡的绘制UI造成性能浪费
4 开始考虑传感器采集的数据以及算法逻辑了,以上三步全是模板代码,第四步才是传感器开发的核心!