基于安卓平台的指南针的实现课程设计报告_第1页
基于安卓平台的指南针的实现课程设计报告_第2页
基于安卓平台的指南针的实现课程设计报告_第3页
基于安卓平台的指南针的实现课程设计报告_第4页
基于安卓平台的指南针的实现课程设计报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、HEFEI UNIVERSITY 课程设计报告系 别 电子信息与电气工程系 专 业 10级通信(2)班 姓 名 麻主席、张知奥、章飞 题 目 基于安卓平台的指南针的实现 学 号 1005073020 指 导 老 师 李祎 完 成 时 间 2014年1月4日 摘要:基于安卓平台实现指南针的基本功能。本文主要介绍本组如何通过模拟器在电脑上实现指南针应用的主要过程关键词:安卓、传感器、指南针安卓简介Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造

2、的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread和Android 3.0 Honeycomb。 Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。 Android早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Ja

3、va编写。 2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。采用Android系统主要厂商包括台湾的HTC,(第一台谷歌的手机G1由HTC生产代工)美国摩托罗拉,SE等,中国大陆厂商如:魅族(M9),华为、中兴、联想、蓝魔等。搭建Android开发平台1  下载软件n JDK 1.5+   到  n Eclipse 3.3

4、(Europa) 到  /downloads/ 下载 n Android SDK 到  2  安装软件和配置环境2.1  安装JDK下载好的JDK是一个可执行安装程序,双击安装。假设安装路径为:C:/Program Files/Java/jdk1.6.0_05(当然其他路径也可以)。 JDK安装完成之后要设置系统环境变量: 我的电脑点右键,选择“属性”,选择“高级”标签,进入环境变量设置。环境变量设置,分

5、别设置三个环境变量:JAVA_HOME、path变量、classpath变量。2.1.1  设置JAVA_HOME在系统环境变量那一栏中点->新建JAVA_HOME (JAVA_HOME指向的是JDK的安装路径)。  变量名: JAVA_HOME;变量值: C:/Program Files/Java/jdk1.6.0_05设置JAVA_HOME量的目的:l 为了方便引用,比如,JDK安装C:/Program Files/Java/jdk1.6.0_05目录里,则设置JAVA_HOME为该目录路径, 

6、那么以后要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串;l 归一原则, 当JDK路径改变的时候, 仅需更改JAVA_HOME的变量值即可, 否则,就要更改任何用绝对路径引用JDK目录的文档, 要是万一没有改全, 某个程序找不到JDK, 后果是可想而知的-系统崩溃!l 第三方软件会引用约定好的JAVA_HOME变量, 不然, 你不能正常使用该软件.2.1.2  设置path变量在系统变量里找到path变量,选择->编

7、辑;(里面已经有很多的变量值,是在变量值的最前面或其他位置加上%JAVA_HOME%/bin;)。变量名:path ;变量值:   %JAVA_HOME%/bin; 目的:使得我们能够在系统中的任何地方运行java应用程序,比如javac、java、javah等,这就要找到我们安装JDK的目录,比如我们的JDK安装在C:/Program Files/Java/jdk1.6.0_05目录下,那么在C:/Program Files/Java/jdk1.6.0_05/bin目录下就是我们常用的java应用程序,我们就需要把C:/j

8、dk1.6.0/bin这个目录加到path环境变量里面。2.1.3  设置classpath环境在系统环境变量那一栏中点->新建classpath。变量名: classpath ;变量值:.;%JAVA_HOME%/lib/;%JAVA_HOME%/jre/lib/(注意,CLASSPATH最前面是有个“.”的,表示当前目录,这样当我们运行java AClass的时候,系统就会先在当前目录寻找AClass文件了。)2.1.4  JDK环境测试配置完成下面写一个简单的java程式来测试J2SDK是否已安装成功:public cla

9、ss HelloWorld        public static void main(String args)            System.out.println("Hello world!");            

10、;将程式保存为文档名为HelloWorld.java的文档。 打开命令提示符窗口,进入到HelloWorld.java所在目录,键入下面的命令:javac HelloWorld.javajava HelloWorld2.2  安装Eclipse将下载的Eclipse压缩包解压到相应的安装目录即可。2.3  配置Android环境2.3.1  安装Android Development Tools (ADT)插件启动eclipse,选择:Help > Software U

11、pdates > Find and Install. 在弹出的对话框中选择第二个选项:Search for new features to install,点击next,进入下一步。 选择New Remote Site,在弹出的对话框中键入远程站点的名字(任意,如Android Plugin),以及站点的URL:https:/dl-  在搜索结果框中,选择Android Plugin,点击next进入下一步。如果有错误提

12、示,则点击右侧工具栏中的Select Required(可能要等待几分钟),然后再点击next进入下一步,如以下图所示。  阅读和接受license agreements,点击next进入下一步。 确认安装路径,点击finish,出现下载框,如以下图所示。  在出现的验证框中,选择install all,开始安装,如以下图所示。  选择Yes,重启Eclipse 在Eclipse中,选择File -> New -> Project,在

13、new project对话框中可查到Android project选项,如下图示,表示ADT插件安装成功。 2.3.2  应用Android SDK到eclipse在Eclipse 工具栏中,选择:Window -> Preferences. 左边菜单中选中android,在右边浏览框中选择sdk的解压目录作为 sdk location,点击Apply,然后点击OK即可3  参考资料:具体编写操作代码一、 Activity_main.xml程序:<?xml ver

14、sion="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <ImageView android:id="+id/Im

15、ageview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="fitCenter" android:src="drawable/compass" /> </LinearLayout>此时acticity_main显示界面为二、 MainActivity.java程序:package pass;import android.app.Activity; im

16、port android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.ImageView; pu

17、blic class MainActivity extends Activity implements SensorEventListener private ImageView imageView; SensorManager mSensorManager; private float currentDegree=0f; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); i

18、mageView=(ImageView)findViewById(R.id.Imageview); mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE); SuppressWarnings("deprecation")Override protected void onResume() mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.S

19、ENSOR_DELAY_GAME); super.onResume(); Override protected void onPause() mSensorManager.unregisterListener(this); super.onPause(); Override protected void onStop() mSensorManager.unregisterListener(this); super.onStop(); Override public void onAccuracyChanged(Sensor arg0, int arg1) SuppressWarnings(&q

20、uot;deprecation")Override public void onSensorChanged(SensorEvent event) int sensortype=event.sensor.getType(); switch(sensortype) case Sensor.TYPE_ORIENTATION: float degree=event.values0; RotateAnimation ra=new RotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.REL

21、ATIVE_TO_SELF,0.5f); ra.setDuration(200); imageView.startAnimation(ra); currentDegree=-degree; break; 3、 compass Manifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="package="pass"android:versionCode="1"android:versionName=&

22、quot;1.0" >  <uses-sdk android:minSdkVersion="8" />         <application android:icon="drawable/compass" android:label="string/compass">  <activity android:name="MainActivity"android:labe

23、l="string/compass">  <intent-filter>  <action android:name="ent.action.MAIN" />  <category android:name="ent.category.LAUNCHER" />  </intent-filter>  </activity>     

24、0;   </application>  </manifest>其中值得注意的有以下几点:1. compass的project2. Imageview添加传感器的类型各种类型的传感器:1.加速度传感器 Sensor.TYPE_ACCELEROMETER:返回手机设备在X,Y,Z三个方向上的加速度.2.磁场传感器,Sensor.TYPE_MAGNETIC_FIELD:,返回周围磁场在手机的X,Y,Z方向上的影响(磁场分量).3.陀螺仪感应器:Sensor.TYPE_GYROSCOPE:4.光线传感器 Sensor.TYPE_LIGH

25、T:返回周围光的强度,单位是勒克斯lx5.距离感应器Sensor.TYPE_PROXIMITY: 6.重力传感器Sensor.TYPE_GRAVITY:7.线性加速传感器Sensor.TYPE_LINEAR_ACCELERATION:8.旋转向量传感器Sensor.TYPE_ROTATION_VECTOR:9.方向传感器:Sensor.TYPE_ORIENTATION:返回三个值,第一个为和正北方向的角度,沿Z轴旋转,0表示正北,90度表示正东,180表示正南,270表示正西.第二个值绕X轴倾斜,水平屏幕向上,返回0,抬起手机顶部时,值开始减小,范围0-180,从手机底部开始抬起,值范围为01

26、80.第三个值为手机左侧或者右侧翘起的高度.沿着Y轴倾斜,范围是-9090,水平放置为0,从左侧抬起,会从0到-90,从右侧开始抬起,范围为090.10.Sensor.TYPE_TEMPERATURE:温度传感器,返回摄氏度.11.Sensor.TYPE_PRESSURE压力传感器,代表手机设备周围压力的大小虽然AndroidSDK定义了十多种传感器,但并不是每一部手机都完全支持这些传感器。传感器的使用Android提供的API中对于不同传感器的调用都是用同一个接口,这样编程起来显得非常简单。先得到传感器的控制器,然后注册你感兴趣的感应事件,代码如下SensorManager SensorMa

27、nager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); /注册方位角传感器,感应事件的周期是0.12s产生一次报告 mSensorManager.registerListener(mListener, SensorManager.SENSOR_ORIENTATION, SensorManager.SENSOR_DELAY_NORMAL );如果想要获得其他感应事件,只需要修改第二个参数为相应的传感器对应的枚举数值,第三个参数是感应事件的频率,设置感应事件频率,有四种频率模式可选,每个相差0.04s。然后设置一个监听器,利

28、用监听接口onSensorChanged来读取具体感应的内容public void onSensorChanged(int sensor, float values) if (Config.DEBUG) Log.d(TAG, "极方位角azimuth," + values0); Log.d(TAG, "倾斜角pitch," + values1); Log.d(TAG, "转角roll," + values2); 指南针应用代码片段,双击复制package com.ijowett.example.SystemService; impor

29、t java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.hardware.Sensor; import android.hardware.SensorListener; import android.hardware.S

30、ensorManager; import android.os.Bundle; import android.util.Config; import android.util.Log; import android.view.View; public class Compass extends Activity private static final String TAG = "Compass" private SensorManager mSensorManager; private SampleView mView; private float mValues; pr

31、ivate final SensorListener mListener = new SensorListener() public void onSensorChanged(int sensor, float values) if (Config.DEBUG) Log.d(TAG, "sensorChanged (" + values0 + ", " + values1 + ", " + values2 + ")"); mValues = values; if (mView != null) mView.inva

32、lidate(); public void onAccuracyChanged(int sensor, int accuracy) / TODO Auto-generated method stub ; Overrideprotected void onCreate(Bundle icicle) super.onCreate(icicle); mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); List sensors = mSensorManager.getSensorList(Sensor.TY

33、PE_ALL); Log.d(TAG, "There are " + sensors.size() + " sensors."); for(Sensor sens : sensors) Log.d(TAG, "Sensor name: " + sens.getType(); Log.d(TAG, "Sensor name: " + sens.getName(); mView = new SampleView(this); setContentView(mView); Overrideprotected void o

34、nResume() if (Config.LOGD) Log.d(TAG, "onResume"); super.onResume(); mSensorManager.registerListener(mListener, SensorManager.SENSOR_ORIENTATION, SensorManager.SENSOR_DELAY_GAME); Overrideprotected void onStop() if (Config.LOGD) Log.d(TAG, "onStop"); mSensorManager.unregisterList

35、ener(mListener); super.onStop(); private class SampleView extends View private Paint mPaint = new Paint(); private Path mPath = new Path(); private boolean mAnimate; private long mNextTime; public SampleView(Context context) super(context); / Construct a wedge-shaped path mPath.moveTo(0, -50); mPath.lineTo(-20, 60); mPath.lineTo(0, 50); mPath.lineTo(20, 60); mPath.close(); Override protected void onDraw(Canvas canvas) Paint paint = mPaint; canvas.drawColor(Color.WHITE); paint.setAntiAlias

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论