最近在调试GPS的时候,GPS需要定位很久才能定位到,花费时间几分钟到几十分钟不定。对用户来说,这是无法接受的。使用logcat查看调试信息, 发现串口是有正确的定位信息的,获取不到到GPS数据不完整,log信息如下::W/LocationManagerService( 2725): Dropping incomplete location: Location[gps 0.000000,0.000000 acc=??? et=+32s243ms
alt=0.0 {Bundle[{satellites=0}]}]。这是因为在Android 4.2中对GPS的数据做了严格的判断,多了isComplete()函数;因此为了兼容4.0的系统,默认可以屏蔽:
掉isComplete() -----强制上报数据,具体修改代码是在 frameworks/base/services/java/com/android/server/LocationManagerService.java,注释掉如下内容:
/* if (!location.isComplete()) {
Log.w(TAG, "Dropping incomplete location: " + location);
return;
}*/
重新编译系统之后,刚开始几次是可以正常使用的,但是在使用5,6次之后,就发现有无法定位了。最后找原因,是因为前面修改了init.rc,回复到以前的设置:
# Set GPS serial and reset GPIO pin
setprop ro.kernel.android.gps /dev/athrnmea
setprop persist.gps.oacmode @f
symlink /dev/ttymxc2 /dev/gpsdevice
因为在/system/etc/gps/Orion.ini有设置接收数据的串口名字,需要进行匹配。修改完再次使用,不管打开多少次都没问题。
在此推荐一篇比较好的文章:http://m.blog.csdn.net/blog/tianruxishui/41514815
原文:http://blog.csdn.net/bzw073/article/details/44341943