Android原生定位服务中的坑

前言

    之前项目中用到的定位基本是第三方的,比如高德、百度、腾讯之类。但是前段时间,第三方地图突然开启收费模式,即便是最简单的定位服务,每年也要五万块。而我的App(小透明)只用到了城市定位功能,并没有地图展示之类的,完全没有必要每年交五万块钱(主要是穷…),处于这个考虑,决定使用Android自带的定位服务来实现需要的功能。

遇到的坑

    关于动态权限之类的,在这里就不做太多的说明了,有不懂的可以私聊我。原生定位,我们基本使用的就是LocationManager,关于这块,也不做太多说明,毕竟这块的内容,网上有很多,今天主要说明的是原生定位在不同机型上面的坑。
    在实际开发中,通过locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)来获取定位的信息,信息也拿到了,然后通过获取到的经纬度,使用GeocodergetFromLocation方法获取地址列表,拿到第一条数据作为当前的定位信息,通过拿到的Address对象获取内部具体的信息。直到这里,都是没有问题的。问题出在Address中的具体信息中。Address中有多个字段,用来显示不同等级的地址信息,比如AdminArea、SubAdminArea、Locality、SubLocality、Thoroughfare、Premises等等。由于功能的需要,我这边需要获取省和市的信息,也就是获取adminArea、subAdminArea即可。按照这个思路,进行了代码的实现,在OPPO和锤子手机中是没问题的,能获取到数据
在这里插入图片描述
然后就欢天喜地的提交了功能,结果华为市场那边一直提示地址定位失败,自己测试怎么都没问题,很是奇怪,一直找不到问题所在。直到同事的一加手机也一直定位失败并崩溃,通过代码日志才找到问题。发现Address中的数据在某些机型下面subLocality这个字段是null的,就是这个原因才导致定位失败并崩溃的!这个很坑啊!不同机型上面返回的数据不同。。。很是无语了!而且最奇怪的是即便不为空,返回的数据也不是相同。
在这里插入图片描述
这是另一台手机上返回的地址信息,subAdminArea字段在不同手机上显示的是不一致的。

解决方法

通过多台手机测试发现,可以通过subLocality这个字段来判断市这个字段应该选用哪个数据来显示。
在这里插入图片描述

结语

以上,就是我在使用Android原生定位服务中遇到的坑以及其解决方案。如果你有更好的解决方案的话,欢迎私聊,共同探讨,共同学习。
最后,打个小广告,私密树洞吐槽App小透明也上线各大应用市场,欢迎大家下载使用并提出意见!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值