Android 按照步骤接入百度地图API,定位显示不了解决办法

Posted 路 宇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 按照步骤接入百度地图API,定位显示不了解决办法相关的知识,希望对你有一定的参考价值。

前言:显示地图按照官方给出的文档,即可显示出来,到了显示定位就出现问题了。
按照给出步骤把相关代码写到项目中,定位坐标怎么也显示不出来。怎么查阅各种资料,终于解决了问题。
定位SDK监听器类和官方的不太一样:

 public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            // MapView 销毁后不在处理新接收的位置
            if (location == null || bmapView == null) {
                return;
            }
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())// 设置定位数据的精度信息,单位:米
                    .direction(location.getDirection()) // 此处设置开发者获取到的方向信息,顺时针0-360
                    .latitude(location.getLatitude())
                    .longitude(location.getLongitude())
                    .build();
            // 设置定位数据, 只有先允许定位图层后设置数据才会生效
            mBaiduMap.setMyLocationData(locData);
            if (isFirstLoc) {
                isFirstLoc = false;
                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(latLng).zoom(20.0f);
                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
            }

        }
    }

替换成这个代码,就能显示坐标了,但是我的坐标发现在几内亚湾,定位到非洲去了。。
而且后台会报这个异常:
在这里插入图片描述
这是因为百度地图API要我们动态请求权限。

在app的build.gralde中的android闭包下增加如下jdk1.8的使用代码:

	compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }

然后在dependencies闭包下增加如下依赖

	//动态权限请求
    implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.4@aar'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation "io.reactivex.rxjava2:rxjava:2.0.0"

同步之后,要在Activity中写检查权限的方法checkVersion():

/**
     * 检查版本
     */
    private void checkVersion() {
        if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.O){
            RxPermissions rxPermissions = new RxPermissions(this);
            rxPermissions.request(Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    .subscribe(granted -> {
                        if (granted) {//申请成功
                            //发起连续定位请求
                            initlocation();// 定位初始化
                        } else {//申请失败
                            Toast.makeText(MainActivity.this,"权限未开启",Toast.LENGTH_SHORT).show();
                        }
                    });
        }else {
            initlocation();// 定位初始化
        }
    }

最后要在清单文件中添加一个静态权限:

<!--读取手机状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

这样定位问题就解决了,做下笔记,防止这种问题再次出现,有不当之处可以在评论区指出~

以上是关于Android 按照步骤接入百度地图API,定位显示不了解决办法的主要内容,如果未能解决你的问题,请参考以下文章

这可能是 Vue 接入百度地图的最佳组件了!

这可能是 Vue 接入百度地图的最佳组件了!

Android百度地图API集成二《定位》

Android 集成百度地图实现设备定位

网页内如何调用开放的api接口实现用户定位

vue 使用百度地图:搜索定点