我看过这个页面:http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE,但我还是迷路了。
我知道位置模式应该返回一个整数。电池节省为2,高精度为3,如果GPS关闭,则应返回0。
抓住当前位置我没有问题......
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location = manager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
double longitude = location.getLongitude();
double latitude = location.getLatitude();
String stlongitude = Double.toString(longitude);
String stlatitude = Double.toString(latitude);
但是当手机的位置模式设置为仅设备时,我必须使用LocationManager的GPS_PROVIDER。这不如NETWORK_PROVIDER准确。我想做一个if,else或case语句,允许我获得当前位置模式,如果设置为High Accuracy或Battery saving,请使用NETWORK_PROVIDER,但如果设置为Device Only,则使用GPS_PROVIDER。
答案 0 :(得分:1)
如果您只想定位KitKat或更高版本的设备(API 19),那么您尝试使用Settings.Secure和LOCATION_MODE是获得启用的提供商的正确方法。但是,您可能更希望自己的应用能够使用早期版本的Android设备。
以下代码使用用户启用的耗电量最少的提供程序获取最后一个位置:
LocationManager manager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
boolean isGpsEnabled = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (isGpsEnabled && !isNetworkEnabled) {
Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} else {
Location location = manager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
答案 1 :(得分:0)
首先要注意的是NETWORK_PROVIDER不如GPS准确,根据开发人员文档,网络prodiver使用
NETWORK_PROVIDER
该提供商根据蜂窝塔的可用性确定位置 和WiFi接入点。通过网络检索结果 查找。
您在检索用户时可以使用的最准确的提供商,位置是GPS,由Andorid Developer docs定义为:
GPS_PROVIDER
该提供商使用卫星确定位置。根据条件,此提供程序可能需要一段时间才能返回位置修复程序。需要权限ACCESS_FINE_LOCATION。
考虑到这一点,以下提示将使您能够以任何方式操纵逻辑:
1)要设置位置管理器以使用设备能够使用的最佳提供商接收更新,您可以致电
/* Getting the name of the BEST provider available */
provider = locationManager.getBestProvider(criteria, true);
/* Getting Current Location using the best provider available */
location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(provider, 300000, 0, this);
2)如果您强制使用网络提供商,请将您的位置管理器设置为要求网络提供商更新,如下所示:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0, this);
3)同样,如果你强行使用GPS:
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 0, this);
答案 2 :(得分:0)
我认为如果您正在寻找LOCATION_MODE而不是提供商,您应该查看此问题并回复:Aegis Implicit Mail (AIM)
因为即使您的所有提供商都已启用,位置模式也可能意味着如果您在建筑物中并且模式为LOCATION_MODE_SENSORS_ONLY,则无法获得良好的位置。