位置測位機能の状態を取得する


「PhoneStateListenerで回線の接続状況の変化を取得する」「NetworkInfoを使って、通信接続が可能状態か知る」では3G/Wifiのネットワーク通信の接続状態を確認する方法を紹介しました。
同じようにGPSなどの位置測位機能の設定状態を確認したい場合があります。
※AndroidではGPSやWiFiを利用して位置情報を取得することができます。

これら位置測位機能の状態はandroid.provider.Settings.Secureクラスを利用することで取得が可能です。

今回は位置測位機能の状態を取得する方法について説明したいと思います。

getStringメソッドとLOCATION_PROVIDERS_ALLOWEDパラメータ

GPSの状態の取得にはandroid.provider.Settings.Secure#getStringメソッドを使用します。

String getString (ContentResolver resolver, String name)

引数にはContentResolverと取得したいパラメータ名を指定します。
パラメータ名にはLOCATION_PROVIDERS_ALLOWEDを指定することで位置測位機能の設定情報を取得することができます。

具体的には以下のように使用します。

String gpsStatus = android.provider.Settings.Secure
		.getString(getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED);

上記コードを実行すると以下のような結果が得られます。

network,gps

networkはWiFi経由での位置測位、gpsはGPS経由での位置測位が有効になっていることを示しています。
このように有効になっている位置測位機能がカンマ区切りで表現されます。

それでは続きからサンプルコードを紹介します。

サンプルコード

サンプルコードではGPS機能の状態に応じてToastを表示しています。

public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);

	Button btn_checkGps = (Button) findViewById(R.id.btn_checkGps);
	btn_checkGps.setOnClickListener(new OnClickListener() {
		public void onClick(View v) {
			// GPSの状態を取得
			String gpsStatus = android.provider.Settings.Secure.getString(getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED);

			// GPSが無効だった場合
			if (gpsStatus.indexOf("gps", 0) < 0) {
				// Toastを表示
				Toast.makeText(getApplicationContext(), "GPSは無効です",
						Toast.LENGTH_LONG).show();

			// GPSが有効だった場合
			} else {
				// Toastを表示
				Toast.makeText(getApplicationContext(), "GPSは有効です",
						Toast.LENGTH_LONG).show();
			}
		}
	});
}

まず、9行目のgetStringメソッドで位置測位機能の設定情報を取得します。
そして取得した結果にgpsという文字列が含まれているか、つまりGPS機能が有効に
なっているかを12行目で確認し、結果に応じたToastを表示するようにしています。

GPSが有効になっているとき
GPSが無効になっているとき