使用百度地图定位当前位置并获取附近poi -- Android学习之路

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

获取位置

定义位置帮助类

    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 == null) return;
            client.unRegisterLocationListener(locationListener);
            locationHelper = null;
        }

    }

接受广播并更新UI


    //获取到 位置信息
    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());
            }
        }
    };

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛系编码i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值