zoukankan      html  css  js  c++  java
  • Sensor

    原理:http://blog.csdn.net/xiaolei05/article/details/18670161

    1.Sensor Type
          重力感应/加速度传感器 (G-Sensor)
          光感应   (Light-Sensor) 
          温度感应
          方向感应
          磁场、
          临近性

    2.如何实现Sensor编程
      
    a. 获取系统服务(SENSOR_SERVICE)返回一个SensorManager 对象
          sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE);
      b. 通过SensorManager对象获取相应的Sensor类型的对象
          sensorObject = sensormanager.getDefaultSensor(sensor Type);
      c. 声明一个SensorEventListener 对象用于侦听Sensor 事件,并重载onSensorChanged方法
          SensorEventListener sensorListener = new SensorEventListener(){         };
      d. 注册相应的SensorService
          sensormanager.registerListener(sensorListener, sensorObject, Sensor TYPE);
      e. 销毁相应的SensorService
          sensormanager.unregisterListener(sensorListener, sensorObject);
        f. SensorListener 接口是传感器应用程序的中心。它包括两个必需方法:
          onSensorChanged(int sensor,float values[]) 方法在传感器值更改时调用。

      该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。

      有些传感器只提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。
    g.当传感器的准确性更改时,将调用

        onAccuracyChanged(int sensor,int accuracy) 

      参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。

    3.关于G-Sensor
      
    Android 加速度传感器的类型是 Sensor.TYPE_ACCELEROMETER

      通过 android.hardware.SensorEvent 返回加速度传感器值。

      加速度传感器返回值的单位是加速度的单位 m/s^2(米每二次方秒),有三个方向的值分别是
        values[0]: x-axis 方向加速度
        values[1]: y-axis 方向加速度
        values[2]: z-axis 方向加速度
      其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系坐标原点

        x 方向就是手机的水平方向,右为正
        y 方向就是手机的水平垂直方向,前为正
        z 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负。

        需要注意的是,由于地球固有的重力加速度g (值为9.8 m/s^2),因此现实中实际加速度值应该是 z方向返回值 - 9.8 m/s^2.

      方向角的定义是手机y轴 水平面上的投影 与 正北方向的夹角。 (值得范围是 0 ~ 359 其中0=North, 90=East, 180=South, 270=West)

      倾斜角的定义是手机y轴 与水平面的夹角 (手机z轴向y轴方向移动为正 ,值得范围是 -180 ~ 180)

      旋转角的定义是手机x轴 与水平面的夹角 (手机x轴离开z轴方向为正, 值得范围是 -90 ~ 90)

      也就是说,当你把手机水平放置在桌面上(屏幕向上)且手机指向正北(Y轴方向),此时传感器获得的xyz三个值应该都为0。

    例子:

    // 获得系统服务

    mSenMgr = (SensorManager)getSystemService(SENSOR_SERVICE);

    // 获得Sensor对象

    mGSensor = mSenMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    // 监听Sensor事件

    lsn = new SensorEventListener() {

    @Override

       public void onSensorChanged(SensorEvent event) {……}

    @Override

       public void onAccuracyChanged(Sensor arg0, int arg1) {……}

    };

    // 注册SensorService

    mSenMgr.registerListener(lsn,mGSensor, SensorManager.SENSOR_DELAY_GAME);

  • 相关阅读:
    分享15款为jQuery Mobile定制的插件
    显​示​器​分​辨​率​调​高​后​黑​屏​的​最​佳​解​决​办​法
    out 和 ref 之间的区别整理
    赋值操作符重载
    最长公共子串
    最长递增子序列
    动态规划
    Eclipse支持Jquery代码提示(JqeuryWTP)
    ubuntu10.04编译内核不显示grub菜单解决
    CSS水平导航条和纵向导航条
  • 原文地址:https://www.cnblogs.com/keyarchen/p/6025946.html
Copyright © 2011-2022 走看看