Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376276
  • 博文数量: 214
  • 博客积分: 770
  • 博客等级: 军士长
  • 技术积分: 1969
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-08 01:22
文章分类

全部博文(214)

文章存档

2013年(110)

2012年(104)

我的朋友

分类: Android平台

2013-07-30 16:20:19

    Android重力感应系统的坐标系

    以屏幕的左下方为原点(2d编程的时候,是以屏幕左上方为原点的,这个值得注意一下),箭头指向的方向为正。从-10到10,以浮点数为等级单位,想象一下以下情形:

    手机屏幕向上(z轴朝天)水平放置的时侯,(x,y,z)的值分别为(0,0,10);

    手机屏幕向下(z轴朝地)水平放置的时侯,(x,y,z)的值分别为(0,0,-10);

    手机屏幕向左侧放(x轴朝天)的时候,(x,y,z)的值分别为(10,0,0);

    手机竖直(y轴朝天)向上的时候,(x,y,z)的值分别为(0,10,0);

    其他的如此类推,规律就是:朝天的就是正数,朝地的就是负数。利用x,y,z三个值求三角函数,就可以精确检测手机的运动状态了。
    SensorMannager传感器管理对象
    手机中的所有传感器都须要通过SensorMannager来访问,调用getSystemService(SENSOR_SERVICE)方法就可以拿到当前手机的传感器管理对象。
    SensorManager mSensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 

    点击(此处)折叠或打开

    1. package com.lwj.sensorapp;

    2. import android.hardware.Sensor;
    3. import android.hardware.SensorEvent;
    4. import android.hardware.SensorEventListener;
    5. import android.hardware.SensorManager;
    6. import android.os.Bundle;
    7. import android.app.Activity;
    8. import android.view.Menu;

    9. public class SensorActivity extends Activity {

    10.      // 感应器管理器
    11.     private SensorManager sensorMgr;
    12.     // 得到加速感应器
    13.     Sensor sensor;
    14.     // 定义各坐标轴上的重力加速度
    15.     private float x, y, z;
    16.  
    17.     // 创建activity
    18.     protected void onCreate(Bundle savedInstanceState) {
    19.         super.onCreate(savedInstanceState);
    20.          
    21.         // 得到当前手机传感器管理对象
    22.         sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
    23.         // 加速重力感应对象
    24.         sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    25.         // 实例化一个监听器
    26.         SensorEventListener lsn = new SensorEventListener() {
    27.             // 实现接口的方法
    28.             public void onSensorChanged(SensorEvent e) {
    29.                 // 得到各轴上的重力加速度
    30.                 x = e.values[SensorManager.DATA_X];
    31.                 y = e.values[SensorManager.DATA_Y];
    32.                 z = e.values[SensorManager.DATA_Z];
    33.                  
    34.                
    35.                 setTitle("X" + x + "," + "Y:" + y + ","
    36.                         + "Z:" + z);
    37.             }
    38.  
    39.             public void onAccuracyChanged(Sensor s, int accuracy) {
    40.             }
    41.         };
    42.          
    43.         // 注册listener,第三个参数是检测的精确度
    44.         sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);
    45.     }
    46.  

    47.     @Override
    48.     public boolean onCreateOptionsMenu(Menu menu) {
    49.         // Inflate the menu; this adds items to the action bar if it is present.
    50.         getMenuInflater().inflate(R.menu.sensor, menu);
    51.         return true;
    52.     }

    53. }





阅读(650) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~