Android学习之百度定位SDK

前天试着用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
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
package xgpushdemo.qt.an.appmap; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData; /*** * 百度定位、导航 * */ public class MainActivity extends Activity { private Button clickbtn; private TextView txt1; private TextView txt2; private MapView mMapView = null; private BaiduMap mBaiduMap=null; //定位相关申明 private LocationClient locationClient; //是否第一次定位 private Boolean isFirstloc=true; //是否开启 private Boolean isStart=true; private String la; private String lo; private String city; public BDLocationListener myListener=new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { if(bdLocation==null||mMapView==null) return; MyLocationData myLocationData= new MyLocationData.Builder().accuracy(bdLocation.getRadius()).direction(100). latitude(bdLocation.getLatitude()).longitude(bdLocation.getLongitude()).build(); mBaiduMap.setMyLocationData(myLocationData); city= bdLocation.getCity(); la=bdLocation.getLatitude()+""; lo=bdLocation.getLongitude()+""; // if(isFirstloc){ // isFirstloc=false; // LatLng ll=new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude()); // MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.newLatLngZoom(ll,16); // mBaiduMap.animateMapStatus(mapStatusUpdate); // } } };
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值