2011年7月5日火曜日

Androidで位置情報を取得する=>失敗時には設定画面を開く

このエントリーをはてなブックマークに追加

現在のAndroid携帯端末の多くは,位置を特定するために,GPS(衛星利用測位システム),または基地局の情報を用いて,位置を測量します.

Androidでは,位置情報の取得手段を「ロケーション・プロバイダ」と呼びます.
携帯端末の状態や,ユーザーによる設定によって,利用できるロケーション・プロバイダは変わります.

そこで,位置情報を取得する際,先に精度の高いGPSを利用して,GPSが利用できない場合には,基地局情報を用いることとなります.

また,GPSや基地局情報を利用可能状態にない時は,設定画面を開き,ユーザに利用可能にしてもらうことも必要かと思います.

下記には,その二つの処理をするプログラムを記載します.

/* 位置情報の取得 */
// ロケーションマネージャの取得
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
// 最適な位置情報プロバイダの選択
// Criteriaを変更することで,各種設定変更可能
String bs = lm.getBestProvider(new Criteria(), true);

Location locate = lm.getLastKnownLocation(bs);
if(locate == null){
// 現在地が取得できなかった場合,GPSで取得してみる
locate = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
if(locate == null){
// 現在地が取得できなかった場合,無線測位で取得してみる
locate = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
locate = null;
if(locate != null){ // 現在地情報取得成功
// 緯度の取得
int latitude = (int) (locate.getLatitude() * 1e6);
// 経度の取得
int longitude = (int) (locate.getLongitude() * 1e6);
Log.d("MYTAG", String.valueOf(latitude));
Log.d("MYTAG", String.valueOf(longitude));
} else {
/* 現在地情報取得失敗処理 */
}

/* 位置情報を取得できなかった場合,設定画面を開く */
if(locate != null){
/* 現在地情報取得成功処理 */
} else {
// 端末の位置情報設定画面へ遷移
try {
startActivity(new Intent("android.settings.LOCATION_SOURCE_SETTINGS"));
} catch (final ActivityNotFoundException e) {
// 位置情報設定画面がない端末の場合
}
}