分享

Android 浅谈Sensor工作流程(一)

 开花结果 2012-09-26

       我们使用 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代码:
  1. public boolean registerListener(SensorListener listener, int sensors, int rate) {
  2. result = registerLegacyListener(...);
  3. }
复制代码

       2. registerLegacyListener 其实就是构造一个 LegacyListener 对象并将其加入 HashMap 中去

java代码:
  1. private boolean registerLegacyListener(int legacyType, int type,
  2. SensorListener listener, int sensors, int rate)
  3. {

  4. legacyListener = new LegacyListener(listener);
  5. mLegacyListenersMap.put(listener, legacyListener); //private HashMap< p> 
  6. LegacyListener> mLegacyListenersMap
  7. }

复制代码

       3. LegacyListener 做了 2 件事 一个是调用我们重载的那 2 个接口 还有一个就是将 sensor 的数据刷到我们的设备显示界面上去

java代码:

  1. private class LegacyListener implements SensorEventListener {

  2. LegacyListener(SensorListener target) {

  3. mTarget = target;
  4. mSensors = 0;
  5. }

  6. public void onSensorChanged(SensorEvent event) {
  7. mapSensorDataToWindow();
  8. mTarget.onSensorChanged(...);//private SensorListener mTarget;
  9. }

  10. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  11. }

  12. }

复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多