web-dev-qa-db-ja.com

ロケーションモードをプログラムで高精度に変更するAndroid

ロケーション設定オプションの下の3つのモードの中からユーザーが選択したロケーションモードに関する情報を取得することは可能ですか?

1.高さ精度

2.バッテリー節約

3.GPSのみ

ユーザーが高精度モードを選択しているかどうかをプログラムで確認し、そうでない場合は自動的に有効にします。出来ますか ?ご意見をお聞かせください。

28
ik024

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

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)を参照してください

3
userM1433372

APIレベル28以降、 LocationManager.isProviderEnabled() を使用して、特定のプロバイダーが有効になっているかどうかを確認する必要があります。

アプリからプログラムで設定を変更することは残念ながらできません。

0
Magnus W