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 初始化过程
过程
[外链图片转存中…(img-HPGXTm3W-1716648741019)]
3,Sensor Client
3.1 初始化过程
[外链图片转存中…(img-PoaUUSIk-1716648741020)]