说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android编程之实现GPS定位

HTML文档下载 WORD文档下载 PDF文档下载
曾几何时,手机开发联盟推出自己的Android手机雏形时,受到了极大的追捧。Google为了鼓励开发人员来开发Android手机的应用程序,提供了1千万美金来奖励那些在Android开发中的获奖者。当然,本文并不是告诉读者如何去赢得大奖,而是帮助读者理解如何使用Android SDK来开发Android程序,其中包括如何使用XML布局来显示广西,从GPS组件中获得设备的位置等,在本文的最后将学习如

 

曾几何时,手机开发联盟推出自己的Android手机雏形时,受到了极大的追捧。Google为了鼓励开发人员来开发Android手机的应用程序,提供了1千万美金来奖励那些在Android开发中的获奖者。当然,本文并不是告诉读者如何去赢得大奖,而是帮助读者理解如何使用Android SDK来开发Android程序,其中包括如何使用XML布局来显示广西,从GPS组件中获得设备的位置等,在本文的最后将学习如何将文本显示在一个定制的视图上。
    一、准备工作
    要想开发Android程序,我们需要如下三种软件:
    1. Eclipse
    2. Android SDK
    3. 开发Android程序的Eclipse 插件
    为了开始我们的工作,首先要安装Eclipse,然后从Google的网站获得Android SDK,并且安装Eclipse插件。
    二、Activity类
    每一种移动开发环境都有自己的基类。如J2ME应用程序的基类是midlets,BREW的基类是applets,而Android程序的基类是 Activity。这个activity为我们提供了对移动操作系统的基本功能和事件的访问。这个类包含了基本的构造方法,键盘处理,挂起来恢复功能,以及其他底层的手持设备的访问。实质上,我们的应用程序将是一个Activity类的扩展。在本文中读者将会通过例子学习到如何使用Activity类来编写Android程序。下面是一个简单的继承Activity的例子。 引用:

 

曾几何时,手机开发联盟推出自己的Android手机雏形时,受到了极大的追捧。Google为了鼓励开发人员来开发Android手机的应用程序,提供了1千万美金来奖励那些在Android开发中的获奖者。当然,本文并不是告诉读者如何去赢得大奖,而是帮助读者理解如何使用Android SDK来开发Android程序,其中包括如何使用XML布局来显示广西,从GPS组件中获得设备的位置等,在本文的最后将学习如何将文本显示在一个定制的视图上。

一、准备工作

    要想开发Android程序,我们需要如下三种软件:

    1. Eclipse

    2. Android SDK

    3. 开发Android程序的Eclipse 插件

 

    为了开始我们的工作,首先要安装Eclipse,然后从Google的网站获得Android SDK,并且安装Eclipse插件。

二、Activity类

    每一种移动开发环境都有自己的基类。如J2ME应用程序的基类是midlets,BREW的基类是applets,而Android程序的基类是 Activity。这个activity为我们提供了对移动操作系统的基本功能和事件的访问。这个类包含了基本的构造方法,键盘处理,挂起来恢复功能,以及其他底层的手持设备的访问。实质上,我们的应用程序将是一个Activity类的扩展。在本文中读者将会通过例子学习到如何使用Activity类来编写Android程序。下面是一个简单的继承Activity的例子。 引用:

 

public class LocateMe extends Activity{public void onCreate(Bundle params){super.onCreate(params);setContentView(R.layout.main);}public boolean onKeyDown(int keyCode, KeyEvent event){return true;}
在上面程序中的onCreate方法将在应用程序第一次开始时调用。Bundle对象包含了任何用于建立参数或环境数据所需要的基本信息。 Activity可以是全屏的,或是悬浮的。它们可以是嵌套的,但是每一部分基本是独立的。那么,也许有人会问,setContentView是做什么的呢?
三 View类
    View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。但它们之间有一些不同。每一个view都有一个用于绘画的画布。这个画布可以用来进行任意扩展。本文为了方便起见,只涉及到了两个主要的View类型:定义View和Android的XML内容View。在上面的代码中,使用的是 “Hello World” XML View,它是以非常自然的方式开始的。
    如果我们查看一下新的Android工程,就会发现一个叫main.xml的文件。在这个文件中,通过一个简单的XML文件,描述了一个屏幕的布局。这个简单的xml文件的内容如下: 引用:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_centerHorizontal="true"    android:text="Press the center key to locate yourself"    /></RelativeLayout>
上面的内容的功能看起来非常明显。这个特殊文件定义了一个相关的布局,这就意味着通过一个元素到另一个元素的关系或是它们父元素的关系来描述。对于视图来说,有一些用于布局的方法,但是在本文中只关注于上述的xml文件。
    RealtiveLayout中包含了一个填充整个屏幕的文本框(也就是我们的LocateMe activity)。这个LocateMe activity在默认情况下是全屏的,因此,文本框将继承这个属性,并且文本框将在屏幕的左上角显示。另外,必须为这个XML文件设置一个引用数,以便 Android可以在源代码中找到它。在默认情况下,这些引用数被保存在R.java中,代码如下: 引用:
public final class R{public static final class layout{public static final int main=0x7f030001;}}
视图也可以被嵌套,但和J2ME不同,我们可以将定制的视图和Android团队发布的Widgets一起使用。在J2ME中,开发人员被迫选择 GameCanvas和J2ME应用程序画布。这就意味着如果我们想要一个定制的效果,就必须在GameCanvas上重新设计我们所有的widget。 Android还不仅仅是这些,视图类型也可以混合使用。Android还带了一个widget库,这个类库包括了滚动条,文本实体,进度条以及其他很多控件。这些标准的widget可以被重载或被按着我们的习惯定制。现在让我们来进入我们的例子。 
四、Android实例
    这个演示应用程序将演示了用户的当前的经度和纬度(在文本框中显示)。onCreate构造方法将和上面的例子基本相同,除了在其中加入了键盘处理,现在让我们看一下onKeyDown的代码。 引用:
public boolean onKeyDown(int keyCode, KeyEvent event){if(keyCode != KeyEvent.KEYCODE_DPAD_CENTER || m_bLoading){return true;}m_bLoading = true;getLocation();return true;}
下面让我们来解释一下这段代码,首先,这段代码检查了当前被按下的键,但还没有开始处理。而是在getLocation方法中处理这一切的。然后,将装载flag标志以及调用getLocation方法,下面是getLocation方法的代码。
private void getLocation(){Location loc;LocationManager locMan;LocationProvider locPro;List<LocationProvider> proList;setContentView(R.layout.laoding);locMan = (LocationManager) getSystemService(LOCATION_SERVICE);proList = locMan.getProviders();locPro = proList.get(0);loc = locMan.getCurrentLocation(locPro.getName());Lat =  (float)loc.getLatitude();Lon =  (float)loc.getLongitude();CreateView();setContentView(customView);}
到这为止,程序开始变得更有趣了。但是不幸的是,Google关于之方面的文档还是比较少了。在程序的变量声明之后,我们需要演示一些装载信息。 R.layout.loading符合了另一个简单的XML布局视图。通过简单地调用setContentView方法可以使用转载信息重绘屏幕。
    读者要注意的是:在编译时,Android会预先将所有的XML布局数据包装起来。如果我们想在编译后变化布局属性,按着规定,我们必须在源程序中做这些事。
     获得LocationManager的唯一方法是通过getSystemService()方法的调用。通过使用LocationManager,我们可以获得一个位置提供者的列表。在一个真实的手持设备中,这个列表包含了一些GPS服务。实际上,我们希望选择更强大,更精确,最后不带有其他附加服务的 GPS。现在,在模拟器中提供了一个用于测试的GPS,这个GPS来自San Francisco。定制的GPS文件可以可以被上传,并进行测试。如果我们要测试更复杂的应用,来自San Francisco的GPS可能并不适合。
    目前我们可以使用位置管理器和位置提供者进行getCurrentLocation的调用。这个方法返回本机的当前位置的一个快照,这个快照将以 Location对象形式提供。在手持设备中,我们可以获得当前位置的经度和纬度。现在,使用这个虚拟的手持设备,我们可以获得这个例子程序的最终结果:建立了显示一个定制的视图。 
五、使用定制视图
    在最简单的窗体中,一个Android中的视图仅仅需要重载一个onDraw方法。定制视图可以是复杂的3D实现或是非常简单的文本形式。下面的CreateView方法列出了上面看到的内容。 引用:
public void CreateView(){customView = new CustomView(this);}
这个方法简单地调用了CustomView对象的构造方法。CustomView类的定义如下: 引用:
public class CustomView extends View{LocateMe overlord;public CustomView(LocateMe pCtx){super(pCtx);overlord = pCtx;}public void onDraw(Canvas cvs){Paint p = new Paint();String sLat = "Latitude: " + overlord.getLat();String sLon = "Longitude: " + overlord.getLon();cvs.drawText(sLat , 32, 32, p);cvs.drawText(sLon, 32, 44, p);}}
这个定制的Android视图获得了经度和违度的测试数据,并将这些数据显示在屏幕上。这要求一个指向LocateMe的指针,Activity类是整个应用程序的核心。它的两个方法是构造方法和onDraw方法。这个构造方法调用了超类的构造方法以及引起了Activity指针的中断。onDraw方法将建立一个新的Paint对象(这个对象封装了颜色、透明度以及其他的主题信息),这个对象将会访问颜色主题。在本程序中,安装了用于显示的字符串,并使用画布指针将它们画到屏幕上。这个和我们了解的J2ME游戏的画布看起来非常类似。
六、Android展望
    从纯粹的开发观点看,Android是一个非常强大的SDK。它使用基于XML的布局和定制视图联合了起来。并可以使用滚动条、地图以及其他的组件。所以的这一切都可以被重载,或由开发人员来定制。但它所提供的文档非常粗糙。在文档中并没有象SMS等技术,但是从整体上来看Android SDK,还是非常有希望的。也非常符合Google承诺的“First Look”SDK。

 

 

 

$.post(url, params, callback)-JQuery API ajaxComplete(callback)-JQuery API ajaxError(callback)-JQuery API ajaxSend(callback)-JQuery API ajaxStart(callback)-JQuery API ajaxStop(callback)-JQuery API ajaxSuccess(callback)-JQuery API load(url, params, callback)-JQuery API loadIfModified(url, params, callback)-JQuery API serialize()-JQuery API Accordion(settings)-JQuery API activate(index)-JQuery API button(hash)-JQuery API center()-JQuery API $.cookie(name)-JQuery API $.cookie(name, value, options)-JQuery API height()-JQuery API innerHeight()-JQuery API innerWidth()-JQuery API offset()-JQuery API outerHeight()-JQuery API outerWidth()-JQuery API scrollLeft()-JQuery API scrollTop()-JQuery API width()-JQuery API ajaxForm(object)-JQuery API ajaxSubmit(object)-JQuery API clearForm()-JQuery API clearInputs()-JQuery API fieldSerialize(true)-JQuery API fieldValue(successful)-JQuery API 关于新闻发布时内容显示的问题 请教Tab Control的使用 microsoft jdbc for sqlserver2000 result 如何将指针移到首位!!在线等急!!! 谁有CVS下载?我去官方网站的下载,根本没有安装文件。 JSP中新建文件夹的问题 关于地图的问题,谁能解决啊? 怎样获取点击或按下winform上 [×]按钮时的事件 在服务器端执行一个 在客户端弹出对话框的程序? 如何不让局域网上的其他机用二级代理上网. oracle 表空间问题 哪位老大知道DBF的格式。 新手想请问关于刚学图象处理先学哪些?即先从哪入手? 请问关于函数挂接的问题 学习中的、已经学好的、准备学习java的朋友来看看 如何在一个线程里创建一个窗体? 难题,,,,(马上结) 怎样使windows service能接受其他程序的调用? ADO+ACCESS问题 十万火急!怎样在ASP.net(C#)中调用OCX对象 如何填充一个封闭的区域 吉林延边发生多起朝鲜警备队员越境抢劫杀人案件 perl有比较好的ide吗????? FilenameFilter用声明吗?? 怎样将两张表中相关数据绑定到DropDownList 请问java 中如何实现大小写不敏感的字符串替换???谢谢 超级头痛:如何找到DataList里的RadioButton? 权限设定时奇怪问题? 200分相送,如何写一个divx的编码过滤器 求一 SQL 语句的写法 高手来看!!!!如何在BCB程序中打开Oracle数据库 在串口通信中怎样解除waitcommevent()的等待 快三十岁了,适合再当程序员么? 小弟急着连数据库,搞不明白怎样连,拜托 怎么得到一个进程的句柄 ADO+ACCESS问题 谁能告诉我windows server 2003的显卡驱动到哪里下载 用DataOutPutStram的writeUTF写文件时开头总出现两个字符的乱码? 关于IMAIL6.0外发邮件问题 是个关于表单的问题? 小问题,在线等 谁能告诉我windows server 2003的显卡驱动到哪里下载 global文件竟然没有,为何???---waiting!!! Direct3D中关于渲染(render)的问题? 各位高手,win2000和xp共享的问题 如何获取foxpro数据库的某张表的结构???? BCB是超级大垃圾,遇到大一点的工程就晕!~ 急,500 人民币 求解一codec 属性设置问题。 请问,如何分页????? 客户机访问不了web服务器。请提供查找击解决问题的思路。多谢! 这是什么意思? 如何自动生成表格 铁被电击后有什么变化 成语“安步当车”中形容怎样走可以像坐车一样? 花开花落怎么样 8a-a^2-16的值是多少 窗外,远远的青山;绿树环绕着小村.是用什么修辞手法 冬天有什么方法不被静电击? 看世间花开花落,赏星空明月圆缺!是什么意思? 坐赏庭前花开花落,________笑看云卷云舒____的完整一句话怎么说? 6.7345保留整数是()保留一位小数()保留两位小数()保留三位小数时() 大地被电击中后会成什么样子?如果有人正站在被点击中1米外的地方会发生什么情况 用电器表面带电人触摸,大地不是有电阻吗,人为什么不会被电击 商务部国际贸易谈判代表钟山谈第四次中阿里云创业创新基地落户杭州外交部就俄罗斯、印度、蒙古三国总理访加拿大预计其温室气体排放量将大幅超标《失恋33天》等6部当代中国电影将走2013中国食博会11月开幕 境外食独联体举行峰会讨论打击犯罪和反恐韩媒称一名朝鲜驻埃塞俄比亚外交官8月美女子为陌生男子捐肾 三年后二人喜结泰国拟向外国游客征收入境税并提高机场综述:中泰高铁合作前景可期英拉遭诉恐五年不得参政 泰国政争点燃中国女性形象工程2014年度全国推广新生儿患心脏病 起诉孕检医院特种车反恐防暴拉练综合广告3种能马上致命的胸痛■盘前操作提醒水污染防治法修改列入规划巴西:宣布方便外国人入境新政里皮:将排最强阵出战广州德比 亚冠主声明 三九企业集团天雷九变掌控九重天不可能平凡的人不可名状的入侵秀逗召唤师异武行道之痕技术宅的无限旅行笔记超脱七界某科学的宅电磁炮魔神万岁禹稷行宫旅游建川博物馆旅游怀远楼旅游江苏沙溪旅游情人谷旅游红碱淖旅游金山寺旅游汉明长城旅游广东大峡谷旅游南水水库旅游栖灵塔旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘