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

上传人:b****4 文档编号:3931459 上传时间:2022-11-26 格式:DOCX 页数:29 大小:1.49MB
下载 相关 举报
基于安卓平台的指南针的实现课程设计报告 精品.docx_第1页
第1页 / 共29页
基于安卓平台的指南针的实现课程设计报告 精品.docx_第2页
第2页 / 共29页
基于安卓平台的指南针的实现课程设计报告 精品.docx_第3页
第3页 / 共29页
基于安卓平台的指南针的实现课程设计报告 精品.docx_第4页
第4页 / 共29页
基于安卓平台的指南针的实现课程设计报告 精品.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

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

《基于安卓平台的指南针的实现课程设计报告 精品.docx》由会员分享,可在线阅读,更多相关《基于安卓平台的指南针的实现课程设计报告 精品.docx(29页珍藏版)》请在冰豆网上搜索。

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

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

HEFEIUNIVERSITY

课程设计报告

 

系  别电子信息与电气工程系

专业10级通信

(2)班

姓  名麻主席、张知奥、章飞

题目基于安卓平台的指南针的实现

学号1005073020

指导老师李祎

完成时间2014年1月4日

 

摘要:

基于安卓平台实现指南针的基本功能。

本文主要介绍本组如何通过模拟器在电脑上实现指南针应用的主要过程

关键词:

安卓、传感器、指南针

 

安卓简介

Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。

目前,最新版本为Android2.4Gingerbread和Android3.0Honeycomb。

Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。

Android早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(softwarestack,又名软件叠层)的架构,主要分为三部分。

底层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程序:

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

layout_width="fill_parent"

android:

layout_height="fill_parent"

android:

gravity="center"

android:

orientation="vertical">

android:

id="@+id/Imageview"

android:

layout_width="fill_parent"

android:

layout_height="fill_parent"

android:

scaleType="fitCenter"

android:

src="@drawable/compass"/>

 

此时acticity_main显示界面为

二、MainActivity.java程序:

packagepass;

importandroid.app.Activity;

importandroid.hardware.Sensor;

importandroid.hardware.SensorEvent;

importandroid.hardware.SensorEventListener;

importandroid.hardware.SensorManager;

importandroid.os.Bundle;

importandroid.view.animation.Animation;

importandroid.view.animation.RotateAnimation;

importandroid.widget.ImageView;

publicclassMainActivityextendsActivityimplementsSensorEventListener{

privateImageViewimageView;

SensorManagermSensorManager;

privatefloatcurrentDegree=0f;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageView=(ImageView)findViewById(R.id.Imageview);

mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);

}

@SuppressWarnings("deprecation")

@Override

protectedvoidonResume(){

mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);

super.onResume();

}

@Override

protectedvoidonPause(){

mSensorManager.unregisterListener(this);

super.onPause();

}

@Override

protectedvoidonStop(){

mSensorManager.unregisterListener(this);

super.onStop();

}

@Override

publicvoidonAccuracyChanged(Sensorarg0,intarg1){

}

@SuppressWarnings("deprecation")

@Override

publicvoidonSensorChanged(SensorEventevent){

intsensortype=event.sensor.getType();

switch(sensortype){

caseSensor.TYPE_ORIENTATION:

floatdegree=event.values[0];

RotateAnimationra=newRotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

ra.setDuration(200);

imageView.startAnimation(ra);

currentDegree=-degree;

break;

}

}

}

 

 

3、compassManifest.xml

xmlversion="1.0"encoding="utf-8"?

>

android="

package="pass"

android:

versionCode="1"

android:

versionName="1.0"> 

minSdkVersion="8"/> 

       

icon="@drawable/compass"android:

label="@string/compass"> 

name="MainActivity"

android:

label="@string/compass"> 

 

name="android.intent.action.MAIN"/> 

name="android.intent.category.LAUNCHER"/> 

 

 

       

 

其中值得注意的有以下几点:

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中对于不同传感器的调用都是用同一个接口,这样编程起来显得非常简单。

先得到传感器的控制器,然后注册你感兴趣的感应事件,代码如下

SensorManagerSensorManager

=(SensorManager)getSystemService(Context.SENSOR_SERVICE);

//注册方位角传感器,感应事件的周期是0.12s产生一次报告

mSensorManager.registerListener(mListener,

SensorManager.SENSOR_ORIENTATION,

SensorManager.SENSOR_DELAY_NORMAL

);

如果想要获得其他感应事件,只需要修改第二个参数为相应的传感器对应的枚举数值,第三个参数是感应事件的频率,设置感应事件频率,有四种频率模式可选,每个相差0.04s。

然后设置一个监听器,利用监听接口onSensorChanged来读取具体感应的内容

publicvoidonSensorChanged(intsensor,float[]values)

{

if(Config.DEBUG)

{

Log.d(TAG,"极方位角azimuth,"+values[0]);

Log.d(TAG,"倾斜角pitch,"+values[1]);

Log.d(TAG,"转角roll,"+values[2]);

}

}

指南针应用

代码片段,双击复制

packagecom.ijowett.example.SystemService;

importjava.util.List;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.Path;

importandroid.hardware.Sensor;

importandroid.hardware.SensorListener;

importandroid.hardware.SensorManager;

importandroid.os.Bundle;

importandroid.util.Config;

importandroid.util.Log;

importandroid.view.View;

publicclassCompassextendsActivity{

privatestaticfinalStringTAG="Compass";

privateSensorManagermSensorManager;

privateSampleViewmView;

privatefloat[]mValues;

privatefinalSensorListenermListener=newSensorListener(){

publicvoidonSensorChanged(intsensor,float[]values){

if(Config.DEBUG)

Log.d(TAG,"sensorChanged("+values[0]+","+values[1]+","+values[2]+")");

mValues=values;

if(mView!

=null){

mView.invalidate();

}

}

publicvoidonAccuracyChanged(intsensor,intaccuracy){

//TODOAuto-generatedmethodstub

}

};

@Override

protectedvoidonCreate(Bundleicicle){

super.onCreate(icicle);

mSensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);

Listsensors=mSensorManager.getSensorList(Sensor.TYPE_ALL);

Log.d(TAG,"Thereare"+sensors.size()+"sensors.");

for(Sensorsens:

sensors)

{

Log.d(TAG,"Sensorname:

"+sens.getType());

Log.d(TAG,"Sensorname:

"+sens.getName());

}

mView=newSampleView(this);

setContentView(mView);

}

@Override

protectedvoidonResume()

{

if(Config.LOGD)Log.d(TAG,"onResume");

super.onResume();

mSensorManager.registerListener(mListener,

SensorManager.SENSOR_ORIENTATION,

SensorManager.SENSOR_DELAY_GAME);

}

@O

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1