Android重力感应

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

手机的感应器在Android里边所代表的类是Sensor,你只要看到在android.hardware这个包下边的都是封装的关于一些特殊的硬件方面的类,比如说Camera、Sensor之类的。。一直都很怀疑为什么HTC的Google手机没有前置摄像头。。。怨念啊。。。

PS:虽然是2.1的机子,但是我用的是1.5的SDK。

代码很简单:我们首先要得到一个手机上的传感器。

Java代码

1.SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);

这行代码只要用过类似开发的都应该知道是什么。

getSystemService(String name)可以用来返回一个硬件设备的控制器。比如说LocationManage(和GPS相关用来确定位置的)、TelephonyManage(查询电话相关内容,比如说IMEI码)、AudioManager(顾名思义,是视频播放用的)等等。。。具体可以观看SDK文档里边Activity的讲解。/int ... d/app/Activity.html

得到重力感应的硬件控制了,然后我们就应该得到一个Sensor了。

Java代码

1.Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ALL);

关于这个参数。。。其实挺复杂的。。。。我开始用的是TYPE_ALL,出的是XYZ三条轴线的偏移量,至于其他的大家可以看下边:

下边是官方SDK中对于各种类型的解析(粗体红字是我加上去的)

Constants

int TYPE_ACCELEROMETER

A constant describing an accelerometer sensor

type.加速度

int TYPE_ALL A constant describing all sensor types.所有类型,NexusOne 默认为 加速度

int TYPE_GYROSCOPE A constant describing a gyroscope sensor type 回转仪(这个不太懂)

int TYPE_LIGHT A constant describing an light sensor type.光线感应吗

int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type.磁场

int TYPE_ORIENTATION A constant describing an orientation sensor type.定向(指北针)和角度

int TYPE_PRESSURE A constant describing a pressure sensor type 压力计

int TYPE_PROXIMITY A constant describing an proximity sensor type.距离?不太懂

int TYPE_TEMPERATURE A constant describing a temperature sensor type 温度啦

然后就是我们需要即时了解手机的偏转度。以TYPE_ALL 为例子。(其实就是TYPE_ACCELEROMETER )

PS :有时候你的机子并不会拥有这么全的感应装置,这个时候你应该再进行以下判断。比如说: Java 代码

1. Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_TEMPERATURE);

2.

3. if (sensor == null ){

4. log.w("NO_SERVICE","没有感应温度的感应装置。")

5. ... ...

6. }else {

7. ... ...

8. }

所有最基本的三维坐标系有三个轴:X、Y和Z,这个学过矩阵或者线性代数的都应该知道吧

(~~~~(>_<)~~~~ 我当年线性代数挂了。。。。惨不忍睹啊。。。后来自学DirectX的时候才觉得原来矩阵变换是这么的重要。。而且更重要的是这个一点也不难吗。。。。)

关于手机的XYZ坐标,把你的手机平放到桌子上,横x,纵y,然后z就是屏幕法线。

官方的例子:(直接粘贴的话空格会变小,所以就截图了)

然后我们注册一个Listener,用来监听我们所得到的值的改变。

Java代码

1.SensorEventListener lsn = new SensorEventListener() {

2.public

void onSensorChanged(SensorEvent e) {

3.x = e.values[SensorManager.DATA_X];

4.y = e.values[SensorManager.DATA_Y];

5.z = e.values[SensorManager.DATA_Z];

6.t.setText("x=" + Math.round(x * ROUND_NUMBER) + "," + "y="

7. + Math.round(y * ROUND_NUMBER) + "," + "z="

8. + Math.round(z * ROUND_NUMBER));

相关文档
最新文档