我看了一下这个页面: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);但是,当手机的定位模式设置为仅限设备时,我必须使用定位管理器的GPS_PROVIDER。它不像NETWORK_PROVIDER那样准确。我想做一个if,else或case语句,允许我获得当前的位置模式,如果它被设置为高精度或节省电池,使用NETWORK_PROVIDER,但如果它被设置为设备仅使用GPS_PROVIDER。
发布于 2014-07-12 09:02:31
如果您只对KitKat或更高版本的设备感兴趣(API19),那么您尝试使用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);
}发布于 2014-03-29 08:13:40
NETWORK_PROVIDER不如GPS准确,
首先要注意的是,根据网络探索者使用的开发人员文档,NETWORK_PROVIDER没有GPS那么精确。
NETWORK_PROVIDER
该提供商根据基站和WiFi接入点的可用性确定位置。通过网络查找来检索结果。
在检索用户时,您可以使用的最准确的提供者位置是GPS,它由Andorid开发人员文档定义为:
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);发布于 2016-03-15 02:48:57
我认为如果你正在寻找LOCATION_MODE,而不是提供商,你应该检查这个问题并回答:Change Location Mode to High Accuracy Programmatically Android
因为即使您的所有提供商都已启用,位置模式也可能意味着,如果您在建筑物中,并且模式为LOCATION_MODE_SENSORS_ONLY,则无法获得良好的位置。
https://stackoverflow.com/questions/22725152
复制相似问题