Android 浅谈Sensor工作流程(一)
来源:互联网 发布:美的集团社会关系网络 编辑:程序博客网 时间:2024/05/01 19:22
转自http://www.apkbus.com/android-14019-1-1.html
我们使用 sensor 接口一般只要注册一下 SensorListener 像下面这样
ApiDemo:
mGraphView = new GraphView(this);
mSensorManager.registerListener(mGraphView,....);
这里的 listener 是因为 sensor 状态变化要产生变化的控件,然后在控件里重载 on
SensorChanged 和 onAccuracyChanged 方法
public void onSensorChanged(int sensor, float[] values)
public void onAccuracyChanged(int sensor, int accuracy)
SensorManager
Sensor 主体代码和流程在 frameworks/base/core/java/android/hardware/SensorManager.java 里面
1.registerListener 其实是调用 registerLegacyListener:
java代码:
- public boolean registerListener(SensorListener listener, int sensors, int rate) {
- result = registerLegacyListener(...);
- }
java代码:
- private boolean registerLegacyListener(int legacyType, int type,
- SensorListener listener, int sensors, int rate)
- {
- legacyListener = new LegacyListener(listener);
- mLegacyListenersMap.put(listener, legacyListener); //private HashMap< p>
- LegacyListener> mLegacyListenersMap
- }
java代码:
- private class LegacyListener implements SensorEventListener {
- LegacyListener(SensorListener target) {
- mTarget = target;
- mSensors = 0;
- }
- public void onSensorChanged(SensorEvent event) {
- mapSensorDataToWindow();
- mTarget.onSensorChanged(...);//private SensorListener mTarget;
- }
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- }
- }
java代码:
- private static native void nativeClassInit();//SensorManager 构造函数里调用
- private static native int sensors_module_init();//SensorManager 构造函数里调用
- private static native int sensors_module_get_next_sensor(Sensor sensor, intnext);
- //SensorManager 构造函数里调用
- // Used within this module from outside SensorManager, don't make private
- static native int sensors_data_init();//SensorThread 构造里调用
- static native int sensors_data_uninit();//SensorThread 析构里调用
- static native int sensors_data_open(FileDescriptor fd); //SensorThread 的 run()循环调用
- static native int sensors_data_close();//SensorThread 的 run()循环调用
- static native int sensors_data_poll(float[] values, int[] status, long[] timestamp);
- //SensorThread的run()循环调用
- //SensorManager 与 IsensorService 的关系
- //SensorManager 调用 IsensorService 其实只是调用了 service 的方法来控制 thread 是 Lock
- void startLocked(ISensorService service) {
- ParcelFileDescriptor fd = service.getDataChanel();
- }
IsensorService 的实例是这么获得的
mSensorService = ISensorService.Stub.asInterface(
ServiceManager.getService(Context.SENSOR_SERVICE));
IsensorService 是通过 aidl 定义的
java代码:
- interface ISensorService{
- ParcelFileDescriptor getDataChanel();
- boolean enableSensor(IBinder listener, String name, int sensor, int enable);
- }
- SensorService
- class SensorService extends ISensorService.Stub {
- }
java代码:
- if (enable == SENSOR_DISABLE) {
- mBatteryStats.noteStopSensor(uid, sensor);
- } else {
- mBatteryStats.noteStartSensor(uid, sensor);
- }
- //看是不是能打开 sensor
- if (enable!=SENSOR_DISABLE && !_sensors_control_activate(sensor, true)) {
- Log.w(TAG, "could not enable sensor " + sensor);
- return false;
- }
- //如果 sensor 打开了 我们要监听状态还要对外面报告状态变化
- if (l == null && enable!=SENSOR_DISABLE) {
- l = new Listener(binder);
- binder.linkToDeath(l, 0);
- mListeners.add(l);
- mListeners.notify();
- }
- //如果 sensor 被关闭了 我们要取消监听并且告诉外面关闭了传感
- if (enable != SENSOR_DISABLE) {
- l.addSensor(sensor, enable);
- } else {
- l.removeSensor(sensor);
- deactivateIfUnused(sensor);
- if (l.mSensors == 0) {
- mListeners.remove(l);
- binder.unlinkToDeath(l, 0);
- mListeners.notify();
- }
- }
- Android 浅谈Sensor工作流程(一)
- Android 浅谈Sensor工作流程(二)
- Android Sensor工作流程(一)
- android中Sensor 工作流程
- android中Sensor 工作流程
- android中Sensor 工作流程
- Android传感器Sensor工作流程
- android中Sensor 工作流程
- sensor工作流程
- Lighting sensor 工作流程
- G-Sensor工作流程
- Android Sensor流程
- android Sensor相关工作
- android-5.0 sensor工作原理—sensorservice的启动(一)
- Android传感器---Motion Sensor(一)
- Android传感器---Position Sensor(一)
- Android传感器---Motion Sensor(一)
- Android传感器---Position Sensor(一)
- Cocos2d-x2.0 之 ClickAndMoveTest “谈不上深入”的分析.
- Android Sensor感应器介绍(一)重力感应加速度获取
- android中Sensor 工作流程
- Cocos2d-x2.0 RotateWorldTest深入分析
- [Android实例] Sensor传感器源码的阅读与应用开发简单实例
- Android 浅谈Sensor工作流程(一)
- 消失的子弹
- Android 浅谈Sensor工作流程(二)
- Android中G-Sensor相关流程
- Andriod Sensor HAL实现
- MATLAB 3D 动画制作(一)- 3D 图形设计
- 浅谈小型网游服务器端技术架构成本分析
- Sensor Framework原理
- 网站用户行为分析在用户市场领域的应用