前天试着用google的三种定位方式,GPS,Network,和基站定位。效果不是很理想。
所以昨天又开始试着用百度定位,最终效果确实比较好(个人感觉,可能是我目前的知识还是太浅薄)
大概整理了一下百度定位的一些知识:
1.这两者的区别:可能是我没有用过一些谷歌其它的SDK,但是就目前而言,百度定位还是很好用的,它直接将三种定位都封装在了一起,开发人员可以通过setLocOption来设置一些他想要选择的模式。有以下三种定位模式:
1.1:高精度定位模式下(Hight_Accuracy):会同时使用GPS、Wifi和基站定位,返回的是当前条件下精度最好的定位结果
1.2:低功耗定位模式下(Battery_Saving):仅使用网络定位即Wifi和基站定位,返回的是当前条件下精度最好的网络定位结果
1.3:仅用设备定位模式下(Device_Sensors):只使用用户的GPS进行定位。这个模式下,由于GPS芯片锁定需要时间,首次定位速度会需要一定的时间,而且GPS不适合室内
而且,如果开发一些手机地图之类的软件,百度SDK还是很方便的!
2.百度定位的准备工作:
2.1:申请key,需要在百度注册成为一个百度开发者,然后申请密钥。地址:http://developer.baidu.com/map/android-mobile-apply-key.htm
2.2:Android开发申请密钥时选择移动端,申请密钥时需要Android的签名证书。Android的签名证书在eclipse-window-preferences-Android-Build里面可以找到SHA1,就是它了.
3.一个百度定位应用Manifest里面应该必须部署的东西:
1.,<application>节点下面的meta-data节点:注意,name必须是"com.baidu.lbsapi.API_Key"(我有用过其它的name,结果都会报错)
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="自己的value" />
2.<application>节点下面必须声明对应的service,原因是,百度定位里面有一个service,必须注册才能调用它,要不然无法启动LocationClient.start()函数
<service android:name="com.baidu.location.f" android:enabled="true"
android:process=":remote">
</service>
4.只需要创建一次LocationClient对象,在创建时注册监听函数,销毁时注销监听函数,然后用按钮来控制start()和stop()
4.1:如果设置参数时没有 option.setScanSpan(),那么只会在start()时得到一次位置,之后如果需要得到位置需要手动调用函数mLocationClient.requestLocation()。
5.可以参考百度给的那个定位的Demo,里面实现了很多基础功能。
6.在监听函数给主线程传递消息时,使用了异步传输数据,即Handler-Thread,给主线程绑定一个Handler,然后重写ReceiveMessage函数,子线程里面可以通过Handler将消息传给主线程。
7.其实可以直接自定义一个自己的Application,然后在里面生成LocationClient,并且注册监听,其它Activity只要通过引用其对象就可以实现start()和stop()功能了。
(每个程序运行时创建一个Application类的对象而且只创建一个,Application是单例模式的一个类。)
以下是主要的代码以及配置文件,最后是完整工程:
public class BaiduLbsDemoActivity extends Activity implements OnClickListener{
private static final String TAG="BaiduLbsDemoActivity";
//控件
private Button btn_StartLocation;
private Button btn_CheckNetwork;
//显示文本
private TextView txt_Loca