适配 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文件,文件内容如下:

<?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惨遭下架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值