前言:显示地图按照官方给出的文档,即可显示出来,到了显示定位就出现问题了。
按照给出步骤把相关代码写到项目中,定位坐标怎么也显示不出来。怎么查阅各种资料,终于解决了问题。
定位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"/>
这样定位问题就解决了,做下笔记,防止这种问题再次出现,有不当之处可以在评论区指出~