1. 背景:
同事在小米手机上使用Google Service 进行定位和获取POI时,调用方法执行后,未获取到任何回调,无成功无失败。
2.排查:
用该小米手机连上USB,未能识别,遂放弃该手机联调。
乃用HUAWEI Nova来调试,因为nova也定位不到。(但是,nova是有任务结束回调的)
提出猜想:
A.Google服务不可用
通过调用GoogleApiAvailability,得到结果result = SUCCESS,即可用。怀疑该API的使用价值。
B.Google服务可用,但是接口调不通。
未找到判断某个接口可用的判断方法。
C.还是缺少某个服务组件。
无法判断是哪个。
D.Google服务框架版本不对
参考HUAWEI Mate 10,安装了Google服务框架,经测试问题没有改变。
以上思路,无法解决问题,卡住了。
这个时候,新的一周,新的思路:
同事自己连上小米手机,通过GoogleApiAvailability调用,得到result = INVALID,即不可用。那么也就是说,官方Serivce API的使用价值无需怀疑。可得,nova的Google Service确实可用。那么为什么调不通呢?根据小米和nova的不同反馈,推出猜想:
nova的错误和小米不一样,nova有另外的错误。
排查查看logcat,发现了错误,网上搜查,怀疑是Google Service版本与系统不兼容,内部出现了错误。即Google Service进程有问题。
验证:将应用中的Google Service相关一律卸载,再次调用GoogleApiAvailability判断是否可用,返回INVALID,即不可用。证明上面推断。
3.解决方案:
考虑的国外默认Google服务可用且版本正确,在方法执行时,事先判断GoogleApiAvailability是否可用。
4.总结
在解决该问题时,犯了许多错误,致使花费时间较长,大概两三天,如果方向正确的话,根本不需要这么久时间,一天足够了。错误如下:
1.怀疑GoogleApiAvailability的可用性,不该不该。
2.未对错误手机小米和nova进行对比分析,致使变量较多,只能乱猜乱试。
3.未对nova的异常情况认真分析,对nova的错误未重视,把nova的错误等同为小米的错误。
4.只考虑到更换google服务框架,未考虑到完全卸载的场景。
5.未对小米手机进行调试,也就是没有对病人进行针对性检查,却换了一个相似的病人进行排查,却不曾想,两者表象相同,但实际问题并不一样。实乃庸医。
无数事实证明,解决问题的思路很重要。谨记!
网友评论