如何获取安卓手机的当前位置模式?

3
我已经查看了这个页面: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语句,允许我获取当前位置模式,如果设置为高精度或省电,则使用NETWORK_PROVIDER,但如果设置为仅设备,则使用GPS_PROVIDER。
3个回答

1
你正在尝试使用Settings.Secure和LOCATION_MODE来获取已启用的提供程序,如果你只想针对KitKat或更高版本(API 19)的设备进行定位,则这是正确的方法。但更有可能的是,你实际上希望你的应用程序能够与早期版本的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);
}

0

我认为如果你正在寻找LOCATION_MODE而不是提供者,你应该查看这个问题和回答:在Android中以编程方式更改位置模式为高精度

因为即使所有提供者都已启用,位置模式也可能意味着如果您在建筑物内且模式为LOCATION_MODE_SENSORS_ONLY,则无法获得良好的位置。


0

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接