以编程方式将位置模式更改为高精度Android

时间:2014-08-07 06:24:03

标签: android gps location android-location android-geofence

是否可以在位置设置选项下获取用户在三种模式中选择的位置模式的信息,即

1.高精度

2.电池保存

仅限3.GPS

我想以编程方式检查用户是否选择了高精度模式,如果没有,则自动启用它。可能吗 ?请指教。

3 个答案:

答案 0 :(得分:50)

API级别19(Kitkat)以来,可以获取设备的当前位置模式:

public int getLocationMode(Context context)
{
return Settings.Secure.getInt(activityUnderTest.getContentResolver(), Settings.Secure.LOCATION_MODE);

}

这些是可能的返回值(请参阅here):

0 = LOCATION_MODE_OFF
1 = LOCATION_MODE_SENSORS_ONLY
2 = LOCATION_MODE_BATTERY_SAVING
3 = LOCATION_MODE_HIGH_ACCURACY

所以你想要像

这样的东西
if(getLocationMode(context) == 3)
{
// do stuff
}

很遗憾,您无法以编程方式设置位置模式,但您可以将用户直接发送到他可以执行此操作的设置屏幕:

startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));

答案 1 :(得分:3)

您可以在LocationMamager.requestLocationUpdates中提供条件。作为标准,您可以提供以下值之一来选择所需的准确度。

Constants
int ACCURACY_COARSE A constant indicating an approximate accuracy requirement
int ACCURACY_FINE   A constant indicating a finer location accuracy requirement
int ACCURACY_HIGH   a constant indicating a high accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy.
int ACCURACY_LOW    A constant indicating a low location accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy.
int ACCURACY_MEDIUM A constant indicating a medium accuracy requirement - currently used only for horizontal accuracy.

请参阅 http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long,float,android.location.Criteria,android.app.PendingIntent)

答案 2 :(得分:0)

从API级别28开始,您应该使用LocationManager.isProviderEnabled()来确定是否启用了特定的提供程序。

不幸的是,无法通过应用程序以编程方式更改设置。