我的应用只需要在启动时获得粗略定位服务。
具体来说,我需要应用程序的大致位置,以便向用户提供附近商店的信息。
位置不需要一直更新。此外,在这种情况下,粗略定位就足够了。
我希望该应用程序能够自动选择GSM、Wi-Fi或GPS中可用的任何一种方式。
为了节省手机电量,定位服务也应该是一次性的。
我该怎么做呢?
我尝试过单独使用GPS。
我的问题是我不知道如何停止GPS的持续刷新位置功能。我也不知道如何让手机从三种方法中选择其中一种。
非常感谢提供一些示例代码或想法。
我的应用只需要在启动时获得粗略定位服务。
具体来说,我需要应用程序的大致位置,以便向用户提供附近商店的信息。
位置不需要一直更新。此外,在这种情况下,粗略定位就足够了。
我希望该应用程序能够自动选择GSM、Wi-Fi或GPS中可用的任何一种方式。
为了节省手机电量,定位服务也应该是一次性的。
我该怎么做呢?
我尝试过单独使用GPS。
我的问题是我不知道如何停止GPS的持续刷新位置功能。我也不知道如何让手机从三种方法中选择其中一种。
非常感谢提供一些示例代码或想法。
以下是一种特定的观点:
private void _getLocation() {
// Get the location manager
LocationManager locationManager = (LocationManager)
getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(bestProvider);
try {
lat = location.getLatitude();
lon = location.getLongitude();
} catch (NullPointerException e) {
lat = -1.0;
lon = -1.0;
}
}
这可能需要访问FINE_LOCATION权限。因此:
另一种方法是使用此应用,它使用LocationManager。
最快的方法是使用Last Known location,我使用了它,速度相当快:
private double[] getGPS() {
LocationManager lm = (LocationManager) getSystemService(
Context.LOCATION_SERVICE);
List<String> providers = lm.getProviders(true);
Location l = null;
for (int i=providers.size()-1; i>=0; i--) {
l = lm.getLastKnownLocation(providers.get(i));
if (l != null) break;
}
double[] gps = new double[2];
if (l != null) {
gps[0] = l.getLatitude();
gps[1] = l.getLongitude();
}
return gps;
}