2012年2月3日

位置情報を取得してURLに変換する


Androidアプリで現在地を「共有可能」なテキストにするにはどうすればよいか考えてみよう。
現在地情報をメールで送るとか、ソーシャルアプリでシェアするなど、位置情報をテキストデータとして扱いたいことがある。




基本的なやり方


いろいろな方法が考えられるが、いつでも誰でもどこからでもアクセスできる情報ということで、Google MapのURLに変換する方法を考えてみる。

1.位置情報取得



位置情報を取得するには、LocationManagerというシステムマネージャを使う。
その時点の最新の位置情報を取得するだけならば、次のコードのみでできる。

LocationManager locationManager = (LocationManager) context.getSystemService( Context.LOCATION_SERVICE );
Location location = locationManager.getLastKnownLocation( LocationManager.GPS_PROVIDER );


2.Google MapのURLに変換


GoogleMapを操作するにはGoolge Map APIを叩かなければいけない(から、ハードルが高くてヤダなーという)誤解があるかもしれないが、場所を表示するだけならば、URLパラメータで緯度と経度を指定するだけでよいのである。

緯度・経度を指定するURLパラメータは"q"。クエリパラメータとして"q=緯度,経度"という値を与えてあげればよい。

たとえば、スカイツリーの場所を表示するには、

http://maps.google.com/?q=35.710437,139.810703


と指定する。

以上をまとめて、一番短く書くとこうなる。


LocationManager locationManager = (LocationManager) mContext.getSystemService( Context.LOCATION_SERVICE );
location = locationManager.getLastKnownLocation( LocationManager.GPS_PROVIDER );
String result = "http://maps.google.com/?q=" + 
                    Double.toString( location.getLatitude() ) + 
                    "," + 
                    Double.toString( location.getLongtitude() );

実用的な例


だが、これではエラーに対してあまりに寛大すぎるので、もうちょい実用的に書いたのが次のコード。
現在地をGoogleMapのURL文字列として返すメソッドだ。

public String getCurrentLocationOnMap( Context context ){
    // ロケーションマネージャの登録
    final LocationManager locationManager = (LocationManager) context.getSystemService( Context.LOCATION_SERVICE );
    
    // 位置情報の取得
    int retryCount = 0;
    Location location = null;
    for( retryCount = 0; retryCount < 5; retryCount++ ){
        location = locationManager.getLastKnownLocation( LocationManager.GPS_PROVIDER );
        if( location != null ){
            break;
        }
        
        try {
            // 1秒くらい待ってみる
            Thread.sleep( 1000 );
        } catch (InterruptedException e) {
        }
    }
    
    if( retryCount >= 5 ){
        // エラー処理
        Toast.makeText( mContext, mContext.getResources().getString( R.string.errormessage_location), 1000 ).show();
        return "";
    }
    
    // 位置情報の取得
    double lat = location.getLatitude();
    double lng = location.getLongitude();
    
    String result = "http://maps.google.com/?q=" + Double.toString( lat ) + "," + Double.toString( lng );
    
    return result;
}


0 コメント:

コメントを投稿

長崎県 引越 見積もり 単身引っ越し 料金 還暦祝い 父 Blog Entry Ranking
" ); 出会い系を例示