原创地址:http://www.cnblogs.com/jk1001/archive/2010/07/23/1783566.html

android中的很多游戏的游戏都使用了重力感应的技术,但其api demo却并没有重力感应的实例(不知道是不是我没找到,找到的朋友麻烦告诉我一下,谢谢),因为开发的需要,就研究了一下重力感应这方面,因为网上关于这方面的东西比较少,所以写出来跟大家交流一下,算是抛砖引玉吧。(ps.因为重力感应式需要真机才能测试的,所以,下面提供的demo程序只能在真机上跑。)

因为官方说明比较含糊难懂,我用最简单的方式讲一下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三个值求三角函数,就可以精确检测手机的运动状态了。

接下来,用最短的代码完成功能,程序效果就是在title上面输出x,y,z的值。

1 package com.test.AndroidTest;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.hardware.SensorManager;
6 import android.hardware.Sensor;
7 import android.hardware.SensorEventListener;
8 import android.hardware.SensorEvent;
9
10
11 public class SensorTest extends Activity{
12 private SensorManagersensorMgr;
13 Sensorsensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
14 private float x,y,z;
15 protected void onCreate(BundlesavedInstanceState){
16 super .onCreate(savedInstanceState);
17 sensorMgr = (SensorManager)getSystemService(SENSOR_SERVICE);
18 SensorEventListenerlsn = new SensorEventListener(){
19 public void onSensorChanged(SensorEvente){
20 x = e.values[SensorManager.DATA_X];
21 y = e.values[SensorManager.DATA_Y];
22 z = e.values[SensorManager.DATA_Z];
23 setTitle( " x= " + ( int )x + " , " + " y= " + ( int )y + " , " + " z= " + ( int )z);
24 }
25
26 public void onAccuracyChanged(Sensors, int accuracy){
27 }
28 };
29 // 注册listener,第三个参数是检测的精确度
30 sensorMgr.registerListener(lsn,sensor,SensorManager.SENSOR_DELAY_GAME);
31 }
32
33 }
34

需要Dome程序的,请留下Email!

以下是下载地址:

SensorTest.rar

更多相关文章

  1. android 使用asm.jar将android手机屏幕投影到电脑上
  2. Android重力感应开发
  3. Android的加速感应器开发一个控制铁球滚动的游戏:
  4. Android手机屏幕px转dp和dp转px工具类
  5. Android实现检测手机摇晃的监听器
  6. Android(安卓)根据屏幕大小设置字体
  7. android 实现摇一摇功能
  8. android加速度感应
  9. Android重力感应

随机推荐

  1. android获取textview的行数
  2. Android 调整屏幕分辩率
  3. Android禁止EditText自动弹出软键盘的方
  4. Android sql数据库的Android包里面的函数
  5. Android(安卓)6.0只是增量更新? 看看新功
  6. Android各类资源收集(持续更新中...)
  7. Android(安卓)Databinding数据绑定框架
  8. Android第三方异步网路加载库AsyncHttpCl
  9. Android(安卓)7.1 APP 启动流程分析
  10. Android(安卓)开发技术周报 Issue#285