适配 android9.0 系统之路(百度地图) 一

最近市面上开始更新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文件,文件内容如下:



    

2.接着,在AndroidManifest.xml文件下的application标签增加“ android:networkSecurityConfig="@xml/network_security_config"”属性,如下:

 

这是设置允许明文连接。

这三种方式都解决了我们的问题, 推荐是用第二种方式,不过第二种方式由于是用了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惨遭下架

你可能感兴趣的:(android)