基于安卓平台的指南针的实现课程设计报告.doc

上传人:good****022 文档编号:116776786 上传时间:2022-07-06 格式:DOC 页数:26 大小:1.67MB
返回 下载 相关 举报
基于安卓平台的指南针的实现课程设计报告.doc_第1页
第1页 / 共26页
基于安卓平台的指南针的实现课程设计报告.doc_第2页
第2页 / 共26页
基于安卓平台的指南针的实现课程设计报告.doc_第3页
第3页 / 共26页
点击查看更多>>
资源描述
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 下载软件nJDK1.5+到http:/ 安装软件和配置环境2.1 安装JDK下载好的JDK是一个可执行安装程序,双击安装。假设安装路径为:C:/ProgramFiles/Java/jdk1.6.0_05(当然其他路径也可以)。JDK安装完成之后要设置系统环境变量:我的电脑点右键,选择“属性”,选择“高级”标签,进入环境变量设置。环境变量设置,分别设置三个环境变量:JAVA_HOME、path变量、classpath变量。2.1.1 设置JAVA_HOME在系统环境变量那一栏中点-新建JAVA_HOME(JAVA_HOME指向的是JDK的安装路径)。 变量名:JAVA_HOME;变量值:C:/ProgramFiles/Java/jdk1.6.0_05设置JAVA_HOME量的目的:l为了方便引用,比如,JDK安装C:/ProgramFiles/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:/ProgramFiles/Java/jdk1.6.0_05目录下,那么在C:/ProgramFiles/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最前面是有个“.”的,表示当前目录,这样当我们运行javaAClass的时候,系统就会先在当前目录寻找AClass文件了。)2.1.4 JDK环境测试配置完成下面写一个简单的java程式来测试J2SDK是否已安装成功:publicclassHelloWorld publicstaticvoidmain(Stringargs) System.out.println(Helloworld!); 将程式保存为文档名为HelloWorld.java的文档。打开命令提示符窗口,进入到HelloWorld.java所在目录,键入下面的命令:javacHelloWorld.javajavaHelloWorld2.2 安装Eclipse将下载的Eclipse压缩包解压到相应的安装目录即可。2.3 配置Android环境2.3.1 安装AndroidDevelopmentTools(ADT)插件启动eclipse,选择:HelpSoftwareUpdatesFindandInstall.在弹出的对话框中选择第二个选项:Searchfornewfeaturestoinstall,点击next,进入下一步。选择NewRemoteSite,在弹出的对话框中键入远程站点的名字(任意,如AndroidPlugin),以及站点的URL:https:/dl- 应用AndroidSDK到eclipse在Eclipse工具栏中,选择:Window-Preferences.左边菜单中选中android,在右边浏览框中选择sdk的解压目录作为sdklocation,点击Apply,然后点击OK即可3 参考资料:http:/ Activity_main.xml程序: 此时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.values0; 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; 3、 compass Manifest.xml 其中值得注意的有以下几点: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_LIGHT:返回周围光的强度,单位是勒克斯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,从手机底部开始抬起,值范围为0180.第三个值为手机左侧或者右侧翘起的高度.沿着Y轴倾斜,范围是-9090,水平放置为0,从左侧抬起,会从0到-90,从右侧开始抬起,范围为090.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, + values0); Log.d(TAG, 倾斜角pitch, + values1); Log.d(TAG, 转角roll, + values2); 指南针应用代码片段,双击复制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 ( + values0 + , + values1 + , + values2 + ); mValues = values; if (mView != null) mView.invalidate(); 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.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); Overrideprotected void onResume() 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.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(-mValues0); canvas.drawPath(mPath, mPaint); Overrideprotected void onAttachedToWindow() mAnimate = true; super.onAttachedToWindow(); Overrideprotected 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.http:/
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!