本文概要性地介绍如下内容
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 VectorgetSensorList(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);}复制代码