关于LBS项目开发的个人总结

作者:刘占


本人课程项目是基于LBS的好友地图显示服务,所以对googlemap,gps定位以及androidsocket通信方面做了一些研究,列出了了一些核心的开发步骤及容易遇到的问题,希望对读者或者其他同学有帮助

 

1,首先是 google api key的获取

先检查C:\Documents and Settings\Administrator\.android下面是否有debug.keystore,如没有则在eclispe下新建一个以Google APIs为Build Targe的项目,则该文件会生成。





1、在命令行下输入:

keytool -list -alias androiddebugkey -keystore "文件路径>"-storepass android -keypass android 如:

Win7

keytool -list -alias androiddebugkey -keystore "C:\Users\Administrator\.android\debug.keystore"-storepass android -keypass android 




 

 其中:

-list:在终端打印出证书的MD5指纹

-keystore .keystore:目标密钥所在的密钥库

-storepass :密钥库密码

-alias :密钥库内生成MD5指纹的密钥别名

-keypass :指定密钥密码

3、有了MD5密码就可以到Google Map API密钥的生成页面:

http://code.google.com/intl/zh-CN/android/maps-api-signup.html 申请Map API密钥了:









至此,我们就获得了所有开发阶段的应用程序通用的Map API密钥。不过需要注意的是,在应用程序发布时,需要根据为应用程序签名的密钥重新生成Map API密钥,并在程序中修改引用到Map API密钥的地方。

1, 关于位置定位

    关于地理定位系统的API全部位于android.location包内,其中包括以下几个重要的功能类:

LocationManager:本类提供访问定位服务的功能,也提供获取最佳定位提供者的功能。另外,临近警报功能也可以借助该类来实现。

 

LocationProvide:该类是定位提供者的抽象类。定位提供者具备周期性报告设备地理位置的功能。

 

LocationListener:提供地位信息发生改变时的回调功能。必须事先在定位管理器中注册监听器对象。

 

Criteria:该类使得应用能够通过在LocationProvider中设置的属性来选择合适的定位提供者。

 

Geocoder:用处理地理编码和反向地理编码的类。地理编码是指将地址或者其他描述转变为经度和纬度,反向地理编码是将经度和纬度转变为地址或描述语言,其中包含了两个构造   函数,需要传入经度和纬度的坐标。getFromLocation方法可以得到一组关于地址的数组。

 

要使用地理定位,首先需要取得LocationManager的实例,在Android中,获取LocationManager的唯一方法就是通过getSystemService()方法的调用。通过使用LocationManager,我们也可以获得一个位置提供者的列表。在一个真实的手持设备中,这个列表包含了一些GPS服务。我盟也可以选择更强大、更精准、不带其他附件服务的GPS。代码如下:

 

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

 

取得LocationManager对象后,我们还需要注册一个周期性的更新视图,代码如下:

locationManager.requestLocationUpdate(LocationManager.GPS_PROVIDER,1000,0,locationManager);

 

其中第一个参数是设置服务提供者,第二个参数是周期,这里需要特别说明一下最后一个参数locationManager,它用来监听定位信息的改变,所以我们必须实现以下几个方法:

  onLocationChanged(Location location):当坐标改变时触发次函数,如果Provider传进相同的坐标,它就不会触发。

  onProviderDisabled(String provider):Provider禁用时触发此函数,如GPS被关闭。

 

  onProviderEnabled(Sting provider):Provider启用是触发此函数,如GPS被打开。

 

  onStatusChanged(String provider, int status,Bundle extras):Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数。

3,手机端与server端的交互

使用socket连接于PC端交互的话,通常我们使用的是objectoutputstream的writeobject()方法来发送对象,使用objectinputstream的readobject()方法来接收对象。而且,要发送的对象一定要被序列化,一个对象能够序列化的前提是实现Serializable接口,Serializable接口没有方法,更像是个标记。有了这个标记的Class就能被序列化机制处理。

 

import java.io.Serializable; 

 

class TestSerial implements Serializable { 

 

       public byteversion = 100; 

 

       public bytecount = 0; 

 

}

 

假如我们要在手机端通过socket通信发送这个类

Socket socket=newSocket(192.168.1.127,8000);//建立于服务端连接

ObjectOutputStreamfromClient;

TestSerial a= newTestSerial();

fromClient= New ObjectOutputStream(socket.getOutputStream());

fromClient.writeObject(a);


你可能感兴趣的:(Android应用开发系列教程,Android应用开发技巧)