使用百度定位当前位置并获取附近的位置

sky-mxc 总结 ;欢迎转载交流 https://sky-mxc.github.io

1. 下载sdk
2. 生成 SHA1码(debug,和release版本)
3. 申请key
4. 集成sdk
5. 获取位置(包含附近poi)

下载定位sdk

链接 http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download

生成 SHA1 码

在填写 SHA1码的时候能填写两个,发布版和开发版,如果是的一个人开发的话两个都填一个电脑生成的就好了,如果是多人的话,最好是两个码从两个电脑生成;因为如果码不对的话,定位是无法使用的;

debug 版

  1. 定位到 .android 目录下:
  2. 打开cmd 输入命令 keytool -list -v -keystore debug.keystore
  3. 输入口令 :android (百度地图官网提供)
  4. 就得到了SHA1 码:
    开发版SHA1码

发布版

在获取发布版的SHA1前 要对项目进行签名

  1. 输入命令 keytool -list -v -keystore jrjh.jks (ps:jrjh.jks 是你签名是的keystore)
  2. 口令输入你的密码
  3. 得到 发布版的SHA1
    发布版SHA1码

申请key

申请key

集成sdk

详细文档地址:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/buildprojec

获取位置

定义位置帮助类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import android.content.Intent;
import android.util.Log;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
 
/**
 * Location utils.
 * 位置 帮助类
 * @author 孟祥超 on 2016.12.15
 */
public class LocationHelper {
    public static final String TAG = "LocationHelper";
    public LocationClient client= new LocationClient(AppUtils.getAppContext());
    //位置监听
    private BDLocationListener locationListener = new BDLocationListener() {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            //  2016/12/15 发送一个广播啊
            Log.i(TAG, "onReceiveLocation: address="+bdLocation.getAddrStr());
            Intent intent =new Intent(Constants.Intent.LOCATION_CHANGE);
            intent.putExtra("location",bdLocation);
            AppUtils.getAppContext().sendBroadcast(intent);
        }
    };
 
    public static LocationHelper locationHelper;
 
    /**
     * 获取位置帮助类
     * @return location helper
     * @author 孟祥超 on 2016.12.15 14:16:01
     */
    public synchronized static LocationHelper getInstance(){
        if (locationHelper == null){
            locationHelper = new LocationHelper();
        }
        return  locationHelper;
    }
 
    private LocationHelper(){
        initLocation();
    }
 
    //初始化 定位
    private void initLocation(){
        LocationClientOption option = new LocationClientOption();
        option.setIsNeedLocationPoiList(true);  //获取附近 poi
        option.setIsNeedAddress(true);  //需要详细位置
        option.setCoorType("bd09ll");   //百度的编码
        option.setScanSpan(1000*3); //3秒 一次
        option.setIsNeedLocationDescribe(true); //位置语义化
        client.setLocOption(option);    //设置参数
        client.registerLocationListener(locationListener);  //注册获取位置监听
    }
 
    /**
     * 释放 位置对象
     * @author 孟祥超 on 2016.12.15 14:23:04
     */
    public void release(){
        if (locationHelper == nullreturn;
        client.unRegisterLocationListener(locationListener);
        locationHelper = null;
    }
 
}

接受广播并更新UI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    //获取到 位置信息
    private BroadcastReceiver locationChangeReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            BDLocation location =intent.getParcelableExtra("location");
            if (location == null || TextUtils.isEmpty(location.getAddrStr())){
                letterCreateAddress.setText("没有定位的外星球.....");
                return;
            }
            Log.i(TAG, "onReceive: address ="+location.getAddrStr());
            letterCreateAddress.setText(location.getAddrStr());
            List<Poi> pois = location.getPoiList();
            if (pois != null && pois.size() != 0){
                nearbyAddress = new ArrayList<>();
            }else{
                return;
            }
            for (Poi poi :pois){
                Log.i(TAG, "onReceive: poi ="+poi.getName());
                nearbyAddress.add(poi.getName());
            }
        }
    };

在项目中已经测试可用;这里做个总结