六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 50|回复: 0

对android重力测试的一个疑问

[复制链接]

升级  31.33%

27

主题

27

主题

27

主题

秀才

Rank: 2

积分
97
 楼主| 发表于 2013-1-15 02:44:45 | 显示全部楼层 |阅读模式
之前有看过IBM Eyes 关于SensorManager的代码,但因为没有手机,没法测试,今天把代码发布到手机上了(android版本为1.5),终于可以知道他的坐标(X,Y,Z)的重力位置,代码如下:

/* *  * IBMEyes.java * sample code for IBM Developerworks Article * Author: W. Frank Ableson * fableson@msiservices.com *  */package com.msi.ibm.eyes;import android.app.Activity;import android.hardware.SensorListener;import android.hardware.SensorManager;import android.os.Bundle;import android.util.Log;import android.widget.TextView;public class IBMEyes extends Activity implements SensorListener {final String tag = "IBMEyes";SensorManager sm = null;TextView xViewA = null;TextView yViewA = null;TextView zViewA = null;TextView xViewO = null;TextView yViewO = null;TextView zViewO = null;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        sm = (SensorManager) getSystemService(SENSOR_SERVICE);        setContentView(R.layout.main);        xViewA = (TextView) findViewById(R.id.xbox);        yViewA = (TextView) findViewById(R.id.ybox);        zViewA = (TextView) findViewById(R.id.zbox);        xViewO = (TextView) findViewById(R.id.xboxo);        yViewO = (TextView) findViewById(R.id.yboxo);        zViewO = (TextView) findViewById(R.id.zboxo);            }                public void onSensorChanged(int sensor, float[] values) {        synchronized (this) {            Log.d(tag, "onSensorChanged: " + sensor + ", x: " + values[0] +             ", y: " + values[1] + ", z: " + values[2]);            if (sensor == SensorManager.SENSOR_ORIENTATION) {            xViewO.setText("Orientation X: " + values[0]);            yViewO.setText("Orientation Y: " + values[1]);            zViewO.setText("Orientation Z: " + values[2]);            }            if (sensor == SensorManager.SENSOR_ACCELEROMETER) {            xViewA.setText("Accel X: " + values[0]);            yViewA.setText("Accel Y: " + values[1]);            zViewA.setText("Accel Z: " + values[2]);            }                    }    }        public void onAccuracyChanged(int sensor, int accuracy) {    Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);            }     @Override    protected void onResume() {        super.onResume();        sm.registerListener(this,                 SensorManager.SENSOR_ORIENTATION |        SensorManager.SENSOR_ACCELEROMETER,                SensorManager.SENSOR_DELAY_NORMAL);    }        @Override    protected void onStop() {        sm.unregisterListener(this);        super.onStop();    }    }

我把手机平放在桌面,屏幕朝上,(x,y,z)的值分别为(0,0,-10);
手机翻过来放(与平放相反,即屏幕朝下),(x,y,z)的值分别为(0,0,10);
手机竖着放,(x,y,z)的值分别为(0,-10,0);
手机倒过来放(与竖相反),(x,y,z)的值分别为(0,10,0);

说明一下,实际输出为float值,为了好确认方向,我取整了;

对这个值有个什么疑问呢,与raymondlueng在博客写的正好相反,这就奇怪了。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表