android中Sensor工作流程

来源:未知 责任编辑:责任编辑 发表时间:2014-01-26 21:59 点击:

工作AndroidJNIthreadOS
JAVA 程序
我们使用 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:
public boolean registerListener(SensorListener listener, int sensors, int rate) {
...
result = registerLegacyListener(...);
...
}
2. registerLegacyListener 其实就是构造一个 LegacyListener 对象并将其加入 HashMap 中去
private boolean registerLegacyListener(int legacyType, int type,
                 SensorListener listener, int sensors, int rate)
{
...
     legacyListener = new LegacyListener(listener);
     mLegacyListenersMap.put(listener, legacyListener); //private HashMap<SensorListener,
LegacyListener> mLegacyListenersMap
...
}
3. LegacyListener 做了 2 件事 一个是调用我们重载的那 2 个接口 还有一个就是将 sensor 的
数据刷到我们的设备显示界面上去
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) {
...
}
}
代码最后是一些 native 方法:
     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, int
next);//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 析构里调用

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Android 完全退出程序
  • 原创:Android应用开发-Andorid歌词秀,含源码
  • android 屏幕保护
  • Android手机软件汉化教程---第四课 dex文件汉化
  • 众多Android 开源项目推荐,给力工作给力学习
  • Android Audio代码分析4
  • Android得到已安装的应用程序信息!
  • Android开发者指南(29) —— USB Host and Accessory
  • Android成长的幕后推手:工程师鲁宾
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1