最近市面上开始更新android9.0系统的手机,身为一个android开发小白惨遭暴打,各种Bug层出不穷,甚至APP被人外国友人刷差评,难受的爆炸,想哭,还有有个大佬支持了一下我这个萌新小白,寄来了两台9.0的手机给我测试修复,废话不多说说多了全是泪,开始修复第一个Bug。
附上9.0官方适配的网址:https://developer.android.google.cn/about/versions/pie/
主要讲百度地图的适配,不知道为什么在9.0之后的版本上地图无法显示也无法定位,而且也不报任何明文的错误提示
毕竟是小白只能到处搜了。
主要参考:https://juejin.im/post/5bfca3bce51d455ed8703d29,谢谢大佬“醉过才知酒浓”
由于app集成的百度地图的SDK是默认使用的http协议 但是由于在Android P(或更高版本中)系统是禁止使用所有的未加密的链接的;
特此感谢各位在互联网上无私贡献的各路大牛们,以下是解决办法,
办法1:将你的targetSdkVersion降到(包含)27以下;(有些手机没有效果)
办法2:在初始化时设置使用Https请求(这是百度地图官方推荐的):
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
//设置使用https请求
SDKInitializer.setHttpsEnable(true);
办法3:更改网络安全的配置如下:
1.在res文件下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
2.接着,在AndroidManifest.xml文件下的application标签增加“ android:networkSecurityConfig="@xml/network_security_config"”属性,如下:
<application
android:name..
...
android:networkSecurityConfig="@xml/network_security_config"
>
</application>
这是设置允许明文连接。
这三种方式都解决了我们的问题, 推荐是用第二种方式,不过第二种方式由于是用了Https,所以会存在加密和解密的过程,可能会影响效率。
能解决大部分的问题,但是亲测还是有些手机会更新9.0后百度地图死了 gps信号弱 导航的时候不管开多远地图都不会移动
那么我建议您换成高德算了哈哈哈哈
我把没有问题的三星Galaxy S8换成了华为M20就出现了 百度地图 的BDLocation.getCity()返回的结果是NULL,而且我已经在代码中加入了 "用location.getCity()获取到的是NULL问题解决方法1"的“option.setIsNeedAddress(true)”还是无法获取
// 地图初始化
this.mMapView = ((MapView)this.mView.findViewById(R.id.bmapView));
this.mMapView.showScaleControl(false);
this.mMapView.showZoomControls(false);
this.mBaiduMap = this.mMapView.getMap();
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(getActivity());
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType(BDLocation.BDLOCATION_GCJ02_TO_BD09LL); // 设置坐标类型
option.setScanSpan(LocationClientOption.MIN_SCAN_SPAN);
//用location.getCity()获取到的是NULL问题解决方法1
option.setIsNeedAddress(true);
mLocClient.setLocOption(option);
mLocClient.start();
讲道理应该不会啊,难道没有定位到?为什么没有定位到呢?。。。。然后我就发现手机没开定位...,要加一个检测定位是否开启的提示了
2019/9/5 目前google play做了骚操作,大部分集成baiduSDK的开发人员得到警告信函,请注意查看邮箱,和客服沟通了,大家尽快更新最新的SDK以免APP惨遭下架