首先介绍加速度传感器。该传感器的作用主要是感应手机的运动。该传感器捕获三个参数,分别表示空间坐标系中X、Y、Z轴方向上的加速度减去重力加速度在相应轴上的分量,其单位均为m/s2。

如图14-1所示,传感器的坐标系与手机屏幕中的坐标系不同,传感器坐标系是以屏幕的左下角为原点,X轴沿着屏幕向右,Y轴沿着屏幕向上,Z轴垂直手机屏幕向上。

android加速度传感器 xml 手机加速度传感器下载_移动开发


图14-1  手机传感器坐标系

接下来通过一个简单的例子来介绍如何获取加速度的值,同时讲解如何在模拟器中调试传感器的应用,开发步骤如下。

下载SensorSimulator,SensorSimulator是一个开源免费的传感器小工具,通过该工具便可以在模拟器中调试传感器的应用,读者可从http://code.google.com/p/openintents/wiki/SensorSimulator网站找到该工具的下载链接。

将下载好的SensorSimulator解压到C盘根目录。

向模拟器安装SensorSimulatorSettings.apk。首先在操作系统中依次选择"开始"|"运行"进入"运行"对话框,如图14-2所示。然后在"运行"对话框输入cmd进入cmd命令行,之后通过cd命令将当前目录导航到SensorSimulatorSettings.apk目录下,然后输入下列命令向模拟器安装该apk。需要注意的是,安装apk时,一定要保证模拟器正在运行才可以,如图14-3所示。

  1. 1   adb install SensorSimulatorSettings.apk 

android加速度传感器 xml 手机加速度传感器下载_android加速度传感器 xml_02


图14-2  运行对话框

android加速度传感器 xml 手机加速度传感器下载_移动开发_03


(点击查看大图)图14-3  安装apk到模拟器

创建一个名为Sample_14_1的Android项目。

搭建界面,用下列代码替代main.xml中的原有代码。

1. 1   <?xml version="1.0" encoding="utf-8"?>          <!-- 声明xml的版本及编码格式 -->
2. 2   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. 3       android:orientation="vertical"
4. 4       android:layout_width="fill_parent"
5. 5       android:layout_height="fill_parent">            <!-- 添加一个垂直的线性布局 -->
6. 6       <TextView
7. 7           android:id="@+id/title"
8. 8           android:gravity="center_horizontal"
9. 9           android:textSize="20px"
10. 10              android:layout_width="fill_parent"
11. 11              android:layout_height="wrap_content"
12. 12              android:text="@string/title"/>          <!-- 添加一个TextView控件 -->
13. 13      <TextView
14. 14          android:id="@+id/myTextView1"
15. 15          android:textSize="18px"
16. 16              android:layout_width="fill_parent"
17. 17              android:layout_height="wrap_content"
18. 18              android:text="@string/myTextView1"/>    <!-- 添加一个TextView控件 -->
19. 19      <TextView
20. 20          android:id="@+id/myTextView2"
21. 21          android:textSize="18px"
22. 22              android:layout_width="fill_parent"
23. 23              android:layout_height="wrap_content"
24. 24              android:text="@string/myTextView2"/>    <!-- 添加一个TextView控件 -->
25. 25      <TextView
26. 26          android:id="@+id/myTextView3"
27. 27          android:textSize="18px"
28. 28              android:layout_width="fill_parent"
29. 29              android:layout_height="wrap_content"
30. 30              android:text="@string/myTextView3"/>    <!-- 添加一个TextView控件 -->
31. 31  </LinearLayout>

代码位置:见随书光盘中源代码/第14章/Sample_14_1/res/layout目录下的main.xml。

说明:首先定义一个垂直的线性布局,然后依次向线性布局中添加四个TextView,并分别为其指定ID、设置文字大小及对其方式等。

在Eclipse中为该项目添加JAR包,使其能够使用SensorSimulator工具的类和方法,添加方法如下。

在Eclipse的Package Explorer中找到该项目的文件夹,然后右键单击该文件夹并选择"Properties"选项,弹出如图14-4所示的窗口。

选择左面的"Java Build Path"选项,然后单击"Libraries"选项卡。

单击"Add External JARs"按钮来添加需要的JAR包。

在弹出的"JAR Selection"对话框中选择C:\sensorsimulator-1.0.0-beta1\lib目录下的sensorsimulator-lib.jar,并将其添加到该项目中。

android加速度传感器 xml 手机加速度传感器下载_android_04


(点击查看大图)图14-4  Properties窗口

代码位置:见随书光盘中源代码/第14章/Sample_14_1/res/layout目录下的activity_main.xml。

说明:首先定义一个垂直的线性布局,然后依次向线性布局中添加四个TextView,并分别为其指定ID、设置文字大小及对其方式等。

在Eclipse中为该项目添加JAR包,使其能够使用SensorSimulator工具的类和方法。添加方法主要有两种,一种方法如下。

在Eclipse的Package Explorer中找到该项目的文件夹,然后右键单击该文件夹并从弹出的快捷菜单中选择"Properties"选项,弹出如图14-4所示的窗口。

选择左面的"Java Build Path"选项,然后单击"Libraries"选项卡。

单击"Add External JARs"按钮来添加需要的JAR包。

在弹出的"JAR Selection"对话框中选择C:\sensorsimulator-1.0.0-beta1\lib目录下的sensorsimulator-lib.jar,并将其添加到该项目中。

1. 1   package wyf.ytl;                                    //声明所在包  
2. 2   import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;                                                         //引入相关类  
3. 3   import android.app.Activity;                        //引入相关类  
4. 4   import android.hardware.SensorListener;             //引入相关类  
5. 5   import android.hardware.SensorManager;              //引入相关类  
6. 6   import android.os.Bundle;                           //引入相关类  
7. 7   import android.widget.TextView;                     //引入相关类  
8. 8   public class Sample_14_1 extends Activity {  
9. 9       TextView myTextView1;                           //X方向的加速度  
10. 10      TextView myTextView2;                           //Y方向的加速度  
11. 11      TextView myTextView3;                           //Z方向的加速度  
12. 12      //SensorManager mySensorManager;                //SensorManager对象引用  
13. 13      SensorManagerSimulator mySensorManager;                                                                         //声明SensorManagerSimulator对象,调试时用  
14. 14      Sensor mysensor;  
15. 15      @Override   
16. 16      public void onCreate(Bundle savedInstanceState) {       //重写onCreate方法  
17. 17          super.onCreate(savedInstanceState);  
18. 18          setContentView(R.layout.activity_main);             //设置当前的用户界面  
19. 19          myTextView1
20. 20          myTextView2
21. 21          myTextView3
22. 22          //mySensorManager
23. 23
24. 24          //调试时用  
25. 25          mySensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);  
26. 26          mySensorManager.connectSimulator();         //与Simulator连接  
27. 27          mysensor=mySensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  
28. 28      }  
29. 29      private SensorEventListener mySensorListener = new
30. 30        
31. 31      @Override  
32. 32      public void onAccuracyChanged(Sensor arg0, int arg1) {  
33. 33          // TODO Auto-generated method stub  
34. 34      }  
35. 35      @Override  
36. 36      public void onSensorChanged(SensorEvent arg0) {  
37. 37          // TODO Auto-generated method stub  
38. 38          if (arg0.type
39. 39              myTextView1.setText("x方向上的加速度为:"+arg0.values[0]);     
40. 40                              //将提取的x数据显示到TextView  
41. 41              myTextView2.setText("y方向上的加速度为:"+arg0.values[1]);     
42. 42                              //将提取的y数据显示到TextView  
43. 43              myTextView3.setText("z方向上的加速度为:"+arg0.values[2]);     
44. 44                              //将提取的x数据显示到TextView  
45. 45              }  
46. 46          }  
47. 47       };   
48. 48      @Override  
49. 49      protected void onResume() {   
50. 50              mySensorManager.registerListener(//注册监听  
51. 51              mySensorListener,  
52. 52              mysensor, //监听器SensorListener对象  
53. 53              SensorManager.SENSOR_DELAY_UI//传感器事件传递的频度  
54. 54              );   
55. 55              super.onResume();  
56. 56      }  
57. 57    @Override  
58. 58    protected void onPause() {                        //重写onPause方法  
59. 59          mySensorManager.unregisterListener(mySensorListener);   //取消注册监听器  
60. 60          super.onPause();  
61. 61      }  
62. 63  }

代码位置:见随书光盘中源代码/第14章/Sample_14_1/src/wyf/ytl目录下的Sample_14_1.java。

第9~11行声明三个TextView的引用,分别用来显示三个方向上的加速度。

第12行声明SensorManager对象的引用,该行为真实机器中的代码,此处因使用的是SensorSimulator工具来模拟传感器,所以需要将该句代码替换成第13行的代码。

第17~21行设置当前的用户界面,然后得到XML文件中配置的各个控件的引用。

第22~23行初始化SensorManager对象,同样因为调试的原因用第24~25行的代码替代。

第29~47行初始化监听器类,并重写了该类中的两个方法。在onSensorChanged方法中只对加速度的变化做处理。第39~44行将得到的数值显示到TextView中。

第48~56行重写了Activity类的onResume方法,在该方法中为SensorManager添加监听,而第57~63行重写了onPause方法,在方法中取消注册的监听器。

为了调试该程序,需要为该程序添加网络权限,因为SensorSimulator安装在Android模拟器中的客户端需要和桌面端的服务器进行通信。将下列代码添加到AndroidManifest.xml文件</manifest>标记之前。如果在真机上调试,则不需要加入该权限。

  1. <uses-permission android:name="android.permission.INTERNET"/ <!-- 调试时用 -->

启动sensorsimulator.jar及之前安装到手机上的SensorSimulatorSettings进行相关的配置,首先运行C:\sensorsimulator-1.0.0-beta1\bin目录下的sensorsimulator.jar文件,然后再运行模拟器中的SensorSimulatorSettings,如图14-5、图14-6所示。

android加速度传感器 xml 手机加速度传感器下载_java_05

在手机端添加电脑的IP地址及端口号,然后单击右上角的Testing,如图14-7所示。

android加速度传感器 xml 手机加速度传感器下载_android加速度传感器 xml_06

android加速度传感器 xml 手机加速度传感器下载_android加速度传感器 xml_07

单击连接后,可选择下面的选项来选择需要接收的数据,此时如果能够读到sensorsimulator的模拟数据,就表明环境配置完成,如图14-8所示。

退出手机端的SensorSimulatorSettings软件,运行之前刚刚开发的Sample_14_1案例,便可观察到sensorsimulator工具模拟出来的加速度数据,如图14-9所示。

android加速度传感器 xml 手机加速度传感器下载_开发工具_08

android加速度传感器 xml 手机加速度传感器下载_开发工具_09