
GPS定位是智能手机上一个比较有意思的功能android gps开发,LBS等服务都有效的借助了GPS定位功能。本文就跟你们分享下Android开发中的GPS定位知识。
一、Android基础知识准备
1、Activity类
每一种移动开发环境都有自己的基类。如J2ME应用程序的基类是midlets,BREW的泛型是applets,而Android程序的子类是Activity。这个activity为我们提供了对移动操作系统的基本功能跟事件的访问。这个类包括了基本的构造方式,键盘处理,挂出来修复功能,以及其它底层的手持设备的访问。实质上,我们的应用程序将是一个Activity类的扩展。在本文中读者将会通过实例学习到怎样使用Activity类来编写Android程序。下面是一个简单的继承Activity的举例。
Java代码
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是做哪些的呢?

2、View类
View类是Android的一个超类,这个类几乎涵盖了所有的屏幕类型。但他们之间有一些不同。每一个view都有一个用于画画的画布。这个画布 可以拿来进行任意扩展。本文为了便于起见,只涉及至了两个主要的View类别:定义View和Android的XML内容View。在里面的代码中,使用 的是“Hello World” XML View,它是以特别自然的方法开始的。
如果我们查看一下新的Android工程,就会看到一个叫main.xml的文件。在这个文件中,通过一个简单的XML文件,描述了一个屏幕的布局。这个简单的xml文件的内容如下:
XML/HTML代码
<?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" > <TextView android: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中,代码如下:

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 GPS定位实例
这个演示应用程序将演示了客户的当前的经度和纬度(在文本框中显示)。onCreate构造方式将跟后面的举例基本相似,除了在其中加入了键盘处理,现在令我们看一下onKeyDown的代码。
Java代码
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode != KeyEvent.KEYCODE_DPAD_CENTER || m_bLoading)
{
return true;
}
m_bLoading = true;
getLocation();
return true;
}

下面令我们来解释一下这段代码,首先,这段代码检查了当前被按下的键,但还没有开始处理。而是在getLocation方法中处理这一切的。然后android gps开发,将装载flag标志或者调用getLocation方法,下面是getLocation方法的代码。
Java代码
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方法列举了里面提到的内容。
Java代码
public voidCreateView(){
customView = newCustomView(this);
}
这个方式简单地调用了CustomView对象的构造方式。CustomView类的定义如下:
Java代码
public class CustomView extendsView{
LocateMe overlord;
publicCustomView(LocateMe pCtx){
super(pCtx);
overlord = pCtx;
}
public voidonDraw(Canvas cvs){
Paint p = newPaint();
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游戏的画布看起来非常类似。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-136002-1.html
我想要的未来
30万人