このエントリーを含むはてなブックマークはてなブックマーク - [Android] GSPが有効か確認し、必要であればGPS設定画面を表示する。 この記事をクリップ!Livedoorクリップ - [Android] GSPが有効か確認し、必要であればGPS設定画面を表示する。 Yahoo!ブックマークに登録 このエントリをつぶやくこのWebページのtweets Googleブックマークに追加

GPSを扱うアプリを実行する場合、GPSセンサーが有効になっていなければセンサーイベントも発生しません。
かといって、ユーザーが実行時に毎回確認してからと言うのもちょっと違います。

ユーザーの操作を単純化する為に、動作開始時(正確には復帰時も含む)にGPSが無効な場合、ダイアログを表示しGPSの設定画面に遷移→ユーザーにONしてもらえるような仕組みを提供します。

以下のような内容を onResume イベントで実行する事でActiveになるタイミング毎にGPSチェックを行います。


private LocationManager nlLocationManager;

//
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ・
    ・
    ・
    // OnCreate でロケーションマネージャを取得
    nlLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    ・
    ・
    ・
}

///
// GPSが有効かCheck
// 有効になっていなければ、設定画面の表示確認ダイアログ
private void chkGpsService() {

	//GPSセンサーが利用可能か?
	if (!nlLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){

		AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
		alertDialogBuilder.setMessage("GPSが有効になっていません。\n有効化しますか?")
	     .setCancelable(false)

		//GPS設定画面起動用ボタンとイベントの定義
	     .setPositiveButton("GPS設定起動",
	          new DialogInterface.OnClickListener(){
	          public void onClick(DialogInterface dialog, int id){
	        	  Intent callGPSSettingIntent = new Intent(
	  					android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
	  			startActivity(callGPSSettingIntent);
	          }
	     });
		//キャンセルボタン処理
	     alertDialogBuilder.setNegativeButton("キャンセル",
	          new DialogInterface.OnClickListener(){
	          public void onClick(DialogInterface dialog, int id){
	               dialog.cancel();
	          }
	     });
    	AlertDialog alert = alertDialogBuilder.create();
	// 設定画面へ移動するかの問い合わせダイアログを表示
    	alert.show();
	}
}

// OnResumeでの呼び出しはこんな感じです。
@Override
protected void onResume() {
    if (nlLocationManager != null) {
    	nlLocationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER,
//                LocationManager.NETWORK_PROVIDER,
            5000,
            0,
            this);
    }

    chkGpsService();

    super.onResume();
}