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 コメント:
コメントを投稿