zoukankan      html  css  js  c++  java
  • [Android]传感器-加速度计-3[转]


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

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

    图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 
    图14-2  运行对话框
    (点击查看大图)图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-beta1lib目录下的sensorsimulator-lib.jar,并将其添加到该项目中。

    (点击查看大图)图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-beta1lib目录下的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 = (TextView) findViewById(R.id.myTextView1);                                                                        //得到myTextView1的引用  
    20. 20          myTextView2 = (TextView) findViewById(R.id.myTextView2);                                                                        //得到myTextView2的引用  
    21. 21          myTextView3 = (TextView) findViewById(R.id.myTextView3);                                                                        //得到myTextView3的引用  
    22. 22          //mySensorManager =   
    23. 23              (SensorManager)getSystemService(SENSOR_SERVICE);                                                                            //获得SensorManager  
    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 SensorEventListener(){  
    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 ==Sensor.TYPE_ACCELEROMETER ) {//只检查加速度的变化  
    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-beta1in目录下的sensorsimulator.jar文件,然后再运行模拟器中的SensorSimulatorSettings,如图14-5、图14-6所示。

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

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

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

  • 相关阅读:
    ssh 使用密钥文件
    VS2015企业版,社区版,专业版详细对比
    Redis 与 数据库处理数据的两种模式(转)
    工业级物联网项目架构设计思想(转)
    C# and Redis,安装作为服务
    C# CRC32
    c++,C# 转换
    app配置智能硬件的解决方案
    C# 与C++的数据转换
    C++ 对数组sizeof 和对数组元素sizeof
  • 原文地址:https://www.cnblogs.com/webapplee/p/3774019.html
Copyright © 2011-2022 走看看