博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Sensor源码分析总结
阅读量:6758 次
发布时间:2019-06-26

本文共 4721 字,大约阅读时间需要 15 分钟。

本文概要性地介绍如下内容

1,类架构框图
2,Sensor Server

  • 初始化过程

3,Sensor Client

  • 初始化过程
  • 与Server端通信的建立过程

4,应用开发总结

1,类架构框图

如上图所示,Sensor Framework相对于Audio等模块来说,比较简单,摘录几个关键类的设计意图如下:

/** * 

* SensorManager lets you access the device's {

@link android.hardware.Sensor * sensors}. Get an instance of this class by calling * {
@link android.content.Context#getSystemService(java.lang.String) * Context.getSystemService()} with the argument * {
@link android.content.Context#SENSOR_SERVICE}. *

*

* Always make sure to disable sensors you don't need, especially when your * activity is paused. Failing to do so can drain the battery in just a few * hours. Note that the system will not disable sensors automatically when * the screen turns off. *

*

* Note: Don't use this mechanism with a Trigger Sensor, have a look * at {

@link TriggerEventListener}. {
@link Sensor#TYPE_SIGNIFICANT_MOTION} * is an example of a trigger sensor. *

*
 * public class SensorActivity extends Activity, implements SensorEventListener { *     private final SensorManager mSensorManager; *     private final Sensor mAccelerometer; * *     public SensorActivity() { *         mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); *         mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); *     } * *     protected void onResume() { *         super.onResume(); *         mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); *     } * *     protected void onPause() { *         super.onPause(); *         mSensorManager.unregisterListener(this); *     } * *     public void onAccuracyChanged(Sensor sensor, int accuracy) { *     } * *     public void onSensorChanged(SensorEvent event) { *     } * } * 
* * @see SensorEventListener * @see SensorEvent * @see Sensor * */public abstract class SensorManager { ......}复制代码
/** * Sensor manager implementation that communicates with the built-in * system sensors. * * @hide */public class SystemSensorManager extends SensorManager {        ......}复制代码
class ISensorServer : public IInterface{public:    DECLARE_META_INTERFACE(SensorServer);     virtual Vector
getSensorList(const String16& opPackageName) = 0; virtual sp
createSensorEventConnection(const String8& packageName, int mode, const String16& opPackageName) = 0; virtual int32_t isDataInjectionEnabled() = 0;};复制代码
/** * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM * and the fields of this data structure must begin with hw_module_t * followed by module specific information. */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); /** * Place the module in a specific mode. The following modes are defined * * 0 - Normal operation. Default state of the module. * 1 - Loopback mode. Data is injected for the the supported * sensors by the sensor service in this mode. * @return 0 on success * -EINVAL if requested mode is not supported * -EPERM if operation is not allowed */ int (*set_operation_mode)(unsigned int mode);};复制代码

2,Sensor Server的初始化过程

3,Sensor Client

3.1 初始化过程

3.2 与Server端通信的建立过程

4,应用开发总结

其中SensorEventListener的定义摘录如下,更多应用层开发细节请参考google 官方文档。

/*** Used for receiving notifications from the SensorManager when* sensor values have changed.*/public interface SensorEventListener {   /**    * Called when sensor values have changed.    * 

See {

@link android.hardware.SensorManager SensorManager} * for details on possible sensor types. *

See also {

@link android.hardware.SensorEvent SensorEvent}. * *

NOTE: The application doesn't own the * {

@link android.hardware.SensorEvent event} * object passed as a parameter and therefore cannot hold on to it. * The object may be part of an internal pool and may be reused by * the framework. * * @param event the {
@link android.hardware.SensorEvent SensorEvent}. */ public void onSensorChanged(SensorEvent event); /** * Called when the accuracy of the registered sensor has changed. * *

See the SENSOR_STATUS_* constants in * {

@link android.hardware.SensorManager SensorManager} for details. * * @param accuracy The new accuracy of this sensor, one of * {
@code SensorManager.SENSOR_STATUS_*} */ public void onAccuracyChanged(Sensor sensor, int accuracy);}复制代码

转载于:https://juejin.im/post/5c9e1de6e51d4567844ba8a3

你可能感兴趣的文章
LeetCode - Pascal's Trangle
查看>>
LeetCode OJ - Validate Binary Search Tree
查看>>
JavaScript基础知识之 每日一题(网上搜罗来滴)
查看>>
最好用最方便最适合程序员使用的为知笔记
查看>>
MSI文件的制作
查看>>
计算机基础------网络
查看>>
A线段树
查看>>
SpringMVC视图解析器 转
查看>>
转s2sh三大框架整合过程(仅供参考)
查看>>
构建之法---阅读报告
查看>>
{ubuntu}乱七八糟重命名为1 2 3.....png
查看>>
【树形DP】【P1364】医院放置
查看>>
JSP第5次测试---测试分析
查看>>
区别:并发与并行
查看>>
SQL 2000 无法添加、更新或删除从MSX服务器上发起的作业
查看>>
python18-day5
查看>>
企业称重防作弊概述 称重软件
查看>>
ASP.NET 大文件下载的实现思路及代码
查看>>
得到一个范围的随机数函数
查看>>
8148 8168 中移植live55 出现except rtsp 中途莫名的断流
查看>>