我正在构建一个 GPS Android 应用程序,它根据用户的当前位置获取最近的位置。
这就是我的应用程序所做的:
- 检查 GPS 或网络是否可用
- 如果两者都不可用,则不要做任何事情。否则,我们首先检查 GPS 是否存在,如果没有,则检查网络。
- 使用其中之一后,我们获取当前位置,然后将其发送到服务器。
- 一旦我们从服务器检索数据并更新 UI,我们就会停止监听进一步的位置更新。一次就足够了,直到他们按下重新启动的刷新按钮。
我希望做什么:
如果 GPS 或网络未能检索到位置,例如 2 分钟,那么我们会切换提供商。我们不希望用户等待太久。
能够同时使用这两个提供程序并从中获得最准确的信息也很好。我查看了http://developer.android.com/guide/topics/location/strategies.html并看到了 isBetterLocation 方法。我将如何将此方法集成到我的应用程序中?我无法理解应该如何、在何处以及何时调用它。我假设 isBetterLocation() 要求我同时调用网络和 GPS。对于我的应用程序来说,听听两者的准确性会很好。我该怎么做呢?如果其中一个不可用怎么办?
这是我的部分代码:
if(!GPSEnabled && !networkEnabled)
{
Toast.makeText(this, "Error: This application requires a GPS or network connection",
Toast.LENGTH_SHORT).show();
}
else
{
if(GPSEnabled)
{
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
else if(networkEnabled)
{
System.out.println("Getting updates from network provider");
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
}
}
这就是onLocationChanged
方法。我得到 lat/lng 值,然后将它们发送到我的服务器,然后用它做适当的事情。
public void onLocationChanged(Location location)
{
//Get coordinates
double lat = (location.getLatitude());
double lng = (location.getLongitude());
Log.d("MainActivity", "got location: " + lat + ": " + lng);
//get nearest locations
new GetLocations().execute(SharedVariables.root + SharedVariables.locationsController + SharedVariables.getNearestMethod + lat + "/" + lng);
// Zoom in, animating the camera after the markers have been placed
map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 10));
System.out.println("lat = " + lat + ", lng = " + lng);
//Stop listening for updates. We only want to do this once.
locManager.removeUpdates(this);
}