我正在开发Android的GPS追踪应用程序,以下是我的代码架构:
- BackgroundSyncService: 一个服务类,用于获取位置更新。在此类中初始化GoogleApiClient并实现其他与位置相关的方法。
- AppRunCheckerReceiver:一个广播接收器类,用于定时检查我的
BackgroundSyncService
是否正在运行。如果停止了,则启动。 - GpsEnableReceiver:一个广播接收器类,会在GPS状态发生变化时触发。它会在一段时间间隔内检查我的
BackgroundSyncService
是否正在运行。如果停止了,则启动。 - InternetConnectionStateReceiver:一个广播接收器类,会在互联网状态发生变化时触发。它会在一段时间间隔内检查我的
BackgroundSyncService
是否正在运行。如果停止了,则启动。
在我的BackgroundSyncService
服务中,我使用以下方式初始化GoogleApiClient:
public void setLocationLocationRequest() {
try {
googleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).addApi(com.google.android.gms.location.LocationServices.API).build();
locationRequest = new LocationRequest();
locationRequest.setInterval(3000);
locationRequest.setFastestInterval(3000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
googleApiClient.connect();
} catch (Exception e) {
}
这里的准确性是 LocationRequest.PRIORITY_HIGH_ACCURACY
,间隔时间是
locationRequest.setInterval(3000)
这里是GoogleApiClient实现代码。
这个应用程序的GPS信息部分包含经度、纬度和精度参数。
我的发现:在onLocationChanged(Location location)
方法中,我通过location.getAccuracy()
检查位置对象的精度。如果精度小于50米,则接受它。
在85%的情况下,它像魔术一样正常工作。它从GPS发送给我精确的位置。但在15%的情况下,它会向我发送不准确的位置,例如>300米。
这15%的设备都是低成本的中国品牌手机。
我的问题:
- 如何使精度接近99%?我的代码架构有问题吗?
- GPS精度是否取决于设备配置?如果是,那么我可以为低配置设备做些什么?
- Uber、Go-JEK等共享出行应用程序如何适用于所有设备?它们是否对GPS进行了额外的编码?
- 我的应用程序面向孟加拉国。这里的互联网速度很慢。这会对GPS精度产生负面影响吗?
感谢您提供的帮助。同时,也对我的糟糕英语表示抱歉。
FusedLocationProviderAPI
吗? - Piyush