基于安卓平台的指南针的实现课程设计报告--学士学位论文.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 平台 指南针 实现 课程设计 报告 学士学位 论文
- 资源描述:
-
HEFEI UNIVERSITY 课程设计报告 系 别 电子信息与电气工程系 专 业 10级通信(2)班 姓 名 麻主席、张知奥、章飞 题 目 基于安卓平台的指南针的实现 学 号 1005073020 指 导 老 师 李祎 完 成 时 间 2014年1月4日 摘要: 基于安卓平台实现指南针的基本功能。 本文主要介绍本组如何通过模拟器在电脑上实现指南针应用的主要过程 关键词: 安卓、传感器、指南针 安卓简介 Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread和Android 3.0 Honeycomb。 Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。 Android早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。 2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。采用Android系统主要厂商包括台湾的HTC,(第一台谷歌的手机G1由HTC生产代工)美国摩托罗拉,SE等,中国大陆厂商如:魅族(M9),华为、中兴、联想、蓝魔等。 搭建Android开发平台 1 下载软件 n JDK 1.5+ 到 下载 n Eclipse 3.3(Europa) 到 http://www.eclipse.org/downloads/ 下载 n Android SDK 到 下载 2 安装软件和配置环境 2.1 安装JDK 下载好的JDK是一个可执行安装程序,双击安装。假设安装路径为:C:/Program Files/Java/jdk1.6.0_05(当然其他路径也可以)。 JDK安装完成之后要设置系统环境变量: 我的电脑点右键,选择“属性”,选择“高级”标签,进入环境变量设置。环境变量设置,分别设置三个环境变量: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为该目录路径, 那么以后要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串; l 归一原则, 当JDK路径改变的时候, 仅需更改JAVA_HOME的变量值即可, 否则,就要更改任何用绝对路径引用JDK目录的文档, 要是万一没有改全, 某个程序找不到JDK, 后果是可想而知的----系统崩溃! l 第三方软件会引用约定好的JAVA_HOME变量, 不然, 你不能正常使用该软件. 2.1.2 设置path变量 在系统变量里找到path变量,选择->编辑;(里面已经有很多的变量值,是在变量值的最前面或其他位置加上%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:/jdk1.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 class HelloWorld{ public static void main(String[] args){ System.out.println("Hello world!"); } } 将程式保存为文档名为HelloWorld.java的文档。 打开命令提示符窗口,进入到HelloWorld.java所在目录,键入下面的命令: javac HelloWorld.java java HelloWorld 2.2 安装Eclipse 将下载的Eclipse压缩包解压到相应的安装目录即可。 2.3 配置Android环境 2.3.1 安装Android Development Tools (ADT)插件 启动eclipse,选择:Help > Software Updates > Find and Install.... 在弹出的对话框中选择第二个选项:Search for new features to install,点击next,进入下一步。 选择New Remote Site,在弹出的对话框中键入远程站点的名字(任意,如Android Plugin),以及站点的URL:https://dl- Plugin 和Europe Discovery Site,然后点击finish,进入下一步搜索的过程,如以下图所示。 在搜索结果框中,选择Android Plugin,点击next进入下一步。如果有错误提示,则点击右侧工具栏中的Select Required(可能要等待几分钟),然后再点击next进入下一步,如以下图所示。 阅读和接受license agreements,点击next进入下一步。 确认安装路径,点击finish,出现下载框,如以下图所示。 在出现的验证框中,选择install all,开始安装,如以下图所示。 选择Yes,重启Eclipse 在Eclipse中,选择File -> New -> Project,在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 version="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/Imageview" 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; import 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; public 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); imageView=(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.SENSOR_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("deprecation") @Override public void onSensorChanged(SensorEvent event) { int sensortype=event.sensor.getType(); switch(sensortype){ case Sensor.TYPE_ORIENTATION: float degree=event.values[0]; RotateAnimation ra=new RotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); ra.setDuration(200); imageView.startAnimation(ra); currentDegree=-degree; break; } } } 三、 compass Manifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" package="pass" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/compass" android:label="@string/compass"> <activity android:name="MainActivity" android:label="@string/compass"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 其中值得注意的有以下几点: 1. compass的project 2. Imageview添加 传感器的类型 各种类型的传感器: 1.加速度传感器 Sensor.TYPE_ACCELEROMETER:返回手机设备在X,Y,Z三个方向上的加速度. 2.磁场传感器,Sensor.TYPE_MAGNETIC_FIELD:,返回周围磁场在手机的X,Y,Z方向上的影响(磁场分量). 3.陀螺仪感应器:Sensor.TYPE_GYROSCOPE: 4.光线传感器 Sensor.TYPE_LIGHT:返回周围光的强度,单位是勒克斯lx 5.距离感应器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,从手机底部开始抬起,值范围为0~180. 第三个值为手机左侧或者右侧翘起的高度.沿着Y轴倾斜,范围是-90~90,水平放置为0,从左侧抬起,会从0到-90,从右侧开始抬起,范围为0~90. 10.Sensor.TYPE_TEMPERATURE:温度传感器,返回摄氏度. 11.Sensor.TYPE_PRESSURE压力传感器,代表手机设备周围压力的大小 虽然AndroidSDK定义了十多种传感器,但并不是每一部手机都完全支持这些传感器。 传感器的使用 Android提供的API中对于不同传感器的调用都是用同一个接口,这样编程起来显得非常简单。先得到传感器的控制器,然后注册你感兴趣的感应事件,代码如下 SensorManager SensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); //注册方位角传感器,感应事件的周期是0.12s产生一次报告 mSensorManager.registerListener(mListener, SensorManager.SENSOR_ORIENTATION, SensorManager.SENSOR_DELAY_NORMAL ); 如果想要获得其他感应事件,只需要修改第二个参数为相应的传感器对应的枚举数值,第三个参数是感应事件的频率,设置感应事件频率,有四种频率模式可选,每个相差0.04s。然后设置一个监听器,利用监听接口onSensorChanged来读取具体感应的内容 public void onSensorChanged(int sensor, float[] values) { if (Config.DEBUG) { Log.d(TAG, "极方位角azimuth," + values[0]); Log.d(TAG, "倾斜角pitch," + values[1]); Log.d(TAG, "转角roll," + values[2]); } } 指南针应用 代码片段,双击复制 package com.ijowett.example.SystemService; import 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.SensorManager; 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; private final SensorListener mListener = new SensorListener() { public void onSensorChanged(int sensor, float[] values) { if (Config.DEBUG) Log.d(TAG, "sensorChanged (" + values[0] + ", " + values[1] + ", " + values[2] + ")"); mValues = values; if (mView != null) { mView.invalidate(); } } public void onAccuracyChanged(int sensor, int accuracy) { // TODO Auto-generated method stub } }; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); List sensors = mSensorManager.getSensorList(Sensor.TYPE_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); } @Override protected void onResume() { if (Config.LOGD) Log.d(TAG, "onResume"); super.onResume(); mSensorManager.registerListener(mListener, SensorManager.SENSOR_ORIENTATION, SensorManager.SENSOR_DELAY_GAME); } @Override protected void onStop() { if (Config.LOGD) Log.d(TAG, "onStop"); mSensorManager.unregisterListener(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(true); paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.FILL); int w = canvas.getWidth(); int h = canvas.getHeight(); int cx = w / 2; int cy = h / 2; canvas.translate(cx, cy); if (mValues != null) { canvas.rotate(-mValues[0]); } canvas.drawPath(mPath, mPaint); } @Override protected void onAttachedToWindow() { mAnimate = true; super.onAttachedToWindow(); } @Override protected void onDetachedFromWindow() { mAnimate = false; super.onDetachedFromWindow(); } } } 传感器—监测装置 感受测量信息 按规律转换为电信号或其他形式的信息输出 自动监测和自动控制 Android 支持的传感器: 1.方向传感器 2.磁场传感器 3.温度传感器 4.光感传感器 5.压力传感器 获取SensorManager对象 getSysteService(Context.SENSOR_SERVICE) 获取传感器类型 getDefaultSensor(int type) 注册传感器 registerListener() 模拟 完成上述代码操作后,运行: 模拟器待机画面 模拟器主界面 模拟器程序界面 模拟器compass效果图 模拟器compass运行界面 功能 1、高精确度:专业航海指针,精确指南。 2、流畅操作:流畅的罗盘旋转,专业的传感器去噪处理,让您的指南针更精准。 3、智能校准:智能的校准提示(8字型环绕设备),提升您的指南针设备的精确度。 4、磁北正北:轻松的磁北正北转换。 5、误差校正:允许手动输入地磁偏角。 总结 通过这次课程设计,我对Android程序设计有了新的认识,尤其是传感器方面,弄懂了许多基础理论,不过自己还有很多方面不足。在这个循序渐进的过程中,解决了一些自己的认为比较难的地方后我又继续朝前行进着。课程设计终于在我们小组的努力下做完了。我更加深入的了解了Android的特点以及一些相关知识。 与其临渊羡鱼,不如退而结网。这次Android课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,在你的勇气和毅力下,困难是抬不了头的。如果你连失败都不怕了,那你还怕什么,拾起懒惰的心,勤奋就会走向成功。这次的课程设计在我未来的时日里,是一个标杆,因为它告诉了我,只要我努力没有什么事我做不好的。 最后我要感谢李祎老师对我们的辛勤培养,谢谢 参考网址 1. 2. 3. 4. 5. 6. 7.展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




基于安卓平台的指南针的实现课程设计报告--学士学位论文.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/10627814.html