- {@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.
*/
摘录如下,更多应用层开发细节请参考google 官方文档。
/**
- Used for receiving notifications from the SensorManager when
- sensor values have changed.
*/
本文详细分析了Android Sensor的Server初始化过程、Client的初始化及通信建立,强调了在开发中合理管理Sensor以避免电池耗电。同时介绍了SensorEventListener的角色,并提供了官方文档作为应用开发参考。
565

被折叠的 条评论
为什么被折叠?



