goo blog サービス終了のお知らせ 

Google Android SDK を使ってみよう!!

米GoogleよりAndroid SDKが提供されました。
良く分からんけど、とりあえず使ってみよう!!

AndroidでGPSを使ってみよう!!!(全ソースコード)

2007-12-07 20:53:58 | IamHere(GPS)

IamHereの全ソースコードです。

長さに制限があるとは・・・知らなかった(^_^;)

package com.google.android.iamhere;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Point;

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;

public class IamHere extends MapActivity {
    
     private MapView mapView;
    
     private static final int M_ZOOMIN = 1;
     private static final int M_ZOOMOUT = 2;
     private static final int M_CHANGE_MODE = 3;
     private static final int M_I_AM_HERE = 4;
     private static final int M_TOKYO_TOWER = 5;
     private static final int M_NAGOYA = 6;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
       
        //    マップを制御するために、マップビューとコントローラを生成する
        mapView = new MapView(this);
       
        setContentView(mapView);
    }
   
    // メニューボタンが押下されたときの処理
    // メニューにアイテムを追加する
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      boolean supRetVal = super.onCreateOptionsMenu(menu);
      menu.add(0, M_ZOOMIN, "ズーーームイン");
      menu.add(0, M_ZOOMOUT, "ズーーーームアウト!!!");
      menu.add(0, M_CHANGE_MODE, "表示モード変更");
      menu.add(0, M_I_AM_HERE, "私はここよ!!!");
      menu.add(0, M_TOKYO_TOWER, "東京タワーを見てみよう!!!");
      menu.add(0, M_NAGOYA, "名古屋城ってどこだ!!");

      return supRetVal;
    }
   
    // メニューのアイテムが選択された時の処理
    @Override
    public boolean onOptionsItemSelected(Menu.Item item) {

       Double ido = 0.0;
       Double keido = 0.0;

       switch (item.getId()) {
           case M_ZOOMIN:
            mapView.getController().zoomTo(Math.min(20, mapView.getZoomLevel() + 1));
            return true;
            
           case M_ZOOMOUT:
            mapView.getController().zoomTo(Math.max(1, mapView.getZoomLevel() - 1));
            return true;
            
           case M_CHANGE_MODE:
            mapView.toggleSatellite();
            return true;
      
           case M_I_AM_HERE:
            //     自分の居る位置(緯度、経度)を取得する
            LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
            Location location = locationManager.getCurrentLocation("gps");
            ido = location.getLatitude() * 1E6;
            keido = location.getLongitude() * 1E6;
            MapController mapController = this.mapView.getController();
            mapController.centerMapTo(new Point(ido.intValue(), keido.intValue()), true);
            return true;

           case M_TOKYO_TOWER:
            ido = 35.658632 * 1E6;
            keido = 139.745411 * 1E6;
            mapController = this.mapView.getController();
            mapController.centerMapTo(new Point(ido.intValue(), keido.intValue()), true);
               mapController.zoomTo(17);
               if(!mapView.isSatellite()) {
                    mapView.toggleSatellite();
               }
               return true;
              
           case M_NAGOYA:
            ido = 35.185583 * 1E6;
            keido = 136.899053 * 1E6;
            mapController = this.mapView.getController();
               mapController.centerMapTo(new Point(ido.intValue(), keido.intValue()), true);
               mapController.zoomTo(17);
               if(!mapView.isSatellite()) {
                    mapView.toggleSatellite();
               }
               return true;
           
       }

      return false;
    }
   
}


AndroidでGPSを使ってみよう!!!(その2)

2007-12-07 20:51:50 | IamHere(GPS)

前回は、自分の居る位置を
GPSを使って緯度と経度を取得し
その場所を、地図に表示することができました。

今日は、前回のプログラムに
地図の拡大縮小など、機能を幾つか追加してみましょう。

では、eclipseを起動して、IamHereプロジェクトを開いてください。

そして、IamHere.javaを編集します。

次に、地図のメニューにアイテムを追加するので
メニューアイテムのIDを、定義しておきましょう。
onCreateメソッドの上に、以下のコードを追加します。

  private static final int M_ZOOMIN = 1;      //  ズームイン
  private static final int M_ZOOMOUT = 2;       //  ズームアウト
  private static final int M_CHANGE_MODE = 3; //  表示モード切替
  private static final int M_I_AM_HERE = 4;        //  私はここよ!!
  private static final int M_TOKYO_TOWER = 5;     //  東京タワーってどこだ!!
  private static final int M_NAGOYA = 6;          //  名古屋城を見てみたい

ちなみに、4番の「私はここよ」以外が、新規メニューアイテムです。

次に、メニューが選択されたときの処理で
新たなメニューの登録を行います。
onCreateOptionsMenuメソッド
以下のコードで置き換えます。

    // メニューボタンが押下されたときの処理
    // ここで、メニューにアイテムを追加する
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      boolean supRetVal = super.onCreateOptionsMenu(menu);
      menu.add(0, M_ZOOMIN, "ズーーームイン");
      menu.add(0, M_ZOOMOUT, "ズーーーームアウト!!!");
      menu.add(0, M_CHANGE_MODE, "表示モード変更");
      menu.add(0, M_I_AM_HERE, "私はここよ!!!");
      menu.add(0, M_TOKYO_TOWER, "東京タワーを見てみよう!!!");
      menu.add(0, M_NAGOYA, "名古屋城ってどこだ!!");

      return supRetVal;
    }

これで、メニューの準備は完了です。
一度、実行してみましょう。

ご覧の通り、メニューが増えました。

次は、メニューが選択された時の処理
順番に作って行きます。

最初は、ズームインと、ズームアウトです。

ズームは、MapControllerクラスが持っている機能で
1~20という値を設定できます。
大きいほど、マップが拡大され
小さいほど、より上空から見たマップが表示されます。

ズームインは、ズームの値を+1することで実現し
ズームアウトは、ズームの値を-1することで実現します。

onOptionsItemSelectedメソッドのswitch文を
以下のコードに置き換えます。

 Double ido = 0.0;
  Double keido = 0.0;

  switch (item.getId()) {
      case M_ZOOMIN:
       mapView.getController().zoomTo(Math.min(20, mapView.getZoomLevel() + 1));
       return true;
       
      case M_ZOOMOUT:
       mapView.getController().zoomTo(Math.max(1, mapView.getZoomLevel() - 1));
       return true;

更に、表示モードの切り替え(地図を表示するか、写真を表示するか)
も追加しましょう。
表示モードについては、MapControllerを使わずに
MapViewを直接操作します。
switch文に、以下のコードを追加します。

      case M_CHANGE_MODE:
       mapView.toggleSatellite();
       return true;

そして次は、「私はここよ!!」ですが
これは昨日作成しているので
メニューIDの定義だけ変更します。

      case M_I_AM_HERE:
       //     自分の居る位置(緯度、経度)を取得する
       LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
       Location location = locationManager.getCurrentLocation("gps");
       ido = location.getLatitude() * 1E6;
       keido = location.getLongitude() * 1E6;
       mapController.centerMapTo(new Point(ido.intValue(), keido.intValue()), true);
       return true;

では、また、少し動かしてみましょう。
switchの閉じカッコを忘れずに記述して、実行です。

 

表示モードを切り替えると、こんな感じです。

 

 

段々、面白くなってきました。
では、最後に、お遊びで
東京タワー」と、「名古屋城」を、表示できるようにしてみます。

まず、東京タワーの位置は以下の通りで
緯度 35.658632
経度 139.745411

名古屋城の位置は、以下の通りです。
緯度 35.185583
経度 136.899053

メニューより、東京タワーと、名古屋城が選択されたときの
処理を追加しましょう。
追加する位置は、先ほど編集したswitch文です。

           case M_TOKYO_TOWER:
            ido = 35.658632 * 1E6;
            keido = 139.745411 * 1E6;
            mapController = this.mapView.getController();
            mapController.centerMapTo(new Point(ido.intValue(), keido.intValue()), true);
               mapController.zoomTo(17);
               if(!mapView.isSatellite()) {
                    mapView.toggleSatellite();
               }
               return true;
              
           case M_NAGOYA:
            ido = 35.185583 * 1E6;
            keido = 136.899053 * 1E6;
            mapController = this.mapView.getController();
               mapController.centerMapTo(new Point(ido.intValue(), keido.intValue()), true);
               mapController.zoomTo(17);
               if(!mapView.isSatellite()) {
                    mapView.toggleSatellite();
               }
               return true;

よーーし実行だ!!
まずは、東京タワー


WOW きました!!
次は、名古屋城です。

 

んっ、これが名古屋城でしょうか?
ま、なんとなくそれっぽいので
名古屋城としておきましょう。

結構、色々できそうです。
面白いものが、出来そうだけど、これっ!!!というものが思い浮かばない・・・
もう少し、もがいてみることにします(^_^;)

今回の、全ソースは、一回の投稿に入りきらないので
次の投稿に分けておきます。

 


AndroidでGPSを使ってみよう!!!(その1)

2007-12-06 21:43:15 | IamHere(GPS)

今日、すばらしいサイトを発見しました。
Siample?というサイトで、GPS地図の利用方法が、説明されています。
http://www.adamrocker.com/blog/

こちらのサイトの情報を見ると、かなり簡単そうなので
早速、色々と試してみることにしました。

で、私が一番やって見たかったことは
「GPSで自分の位置を取得して
 その場所を地図で表示する」
です。

ま、これが出来たからと言って
なにが楽しい?という気もしますが
GPSと地図の連動を試すという意味で
これに挑戦してみます。

では、最初に、Androidプロジェクトを作成します。

eclipseを起動し、[ファイル]-[新規]-[プロジェクト(R)]を開き
Androidの下にある、Android Projectを選択して
以下の情報を設定します。

プロジェクト名:IamHere
パッケージ名:com.google.android.iamhere
Activity name:IamHere
アプリケーション名:IamHere

次に、IamHereプロジェクトのsrcフォルダを開き
更に、com.google.android.iamhereを開くと
IamHere.javaがあるので、それを編集して行きましょう。

まず、最初に、地図を表示するために
以下のように、IamHere.javaを変更します。

package com.google.android.iamhere;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;

import android.os.Bundle;

public class IamHere extends MapActivity {
     
     private MapView mapView;
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
       
        mapView = new MapView(this);
       
        setContentView(mapView);
    }
}

これで、地図が表示できるはずです。
早速、実行してみましょう。
IamHereプロジェクトを右クリックして
[実行]-[Android Application]を選択して下さい。

 

 

うまく行きました。

次は、IamHereアプリケーションにメニューを追加して
地図を操作できるようにしてみます。

また、IamHere.javaを開いて
onCreateメソッドの下に以下のコードを追加します。   

    // メニューボタンが押下されたときの処理
    // メニューにアイテムを追加する
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      boolean supRetVal = super.onCreateOptionsMenu(menu);
      menu.add(0, 0, "私はここよ!!!");

      return supRetVal;
    }

onCreateOptionsMenuメソッド
メニューボタンが押下された時に呼び出されるメソッドで
ここで、メニューにアイテムを追加しています。
また、実行してみましょう。

 

 

ちゃんと、メニューが表示されました。
が、まだ、メニューを選択しても、何も起きません。
それもそのはずメニューのアイテムが選択されたときの処理を
まだ、作っていないからです(^_^;)

では、追加してみましょう。
先ほど追加したメソッドの下に、以下のメソッドを追加します。 

    // メニューのアイテムが選択された時の処理
    @Override
    public boolean onOptionsItemSelected(Menu.Item item) {

       Double ido = 0.0;
       Double keido = 0.0;

       switch (item.getId()) {
           case 0:
            //     自分の居る位置(緯度、経度)を取得する
            LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
            Location location = locationManager.getCurrentLocation("gps");
            ido = location.getLatitude() * 1E6;
            keido = location.getLongitude() * 1E6;
            MapController mapController = this.mapView.getController();
            mapController.centerMapTo(new Point(ido.intValue(), keido.intValue()), true);
            return true;
       }

      return false;
    }

遂に、出てきました、GPSの操作です!!

もっと色々あるのかと思っていたのですが
利用方法は極めて簡単です。

LocationManagerを取得し、現在位置を "gps"で取得するだけです。

また、実行してみましょう。

IamHereアプリケーションを実行して
メニューボタンをクリックして「わたしはここよ!!」を選択します。

あれ?もしかして、海の中が表示されましたか?
良く分かりませんが、私の環境では
初回の位置取得のみ、緯度、経度共に0が帰ってきました。

もう一度、「わたしはここよ!!」を選択すると
以下のような位置が表示されると思います。

 

 

 

所詮、エミュレーターなので、現在位置は、固定されているようです。

これで、GPSを使ったアプリを作る方法は分かったので
これからは、何を作るか?ですね。
なにか面白いものがあれば良いのですが・・・
なんかないかな~

全ソースコードは以下の通りです。

package com.google.android.iamhere;

import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Point;

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;

public class IamHere extends MapActivity {
     
     private MapView mapView;
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
       
        //    マップを制御するために、マップビューとコントローラを生成する
        mapView = new MapView(this);
       
        setContentView(mapView);
    }
   
    // メニューボタンが押下されたときの処理
    // メニューにアイテムを追加する
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      boolean supRetVal = super.onCreateOptionsMenu(menu);
      menu.add(0, 0, "私はここよ!!!");

      return supRetVal;
    }
   
    // メニューのアイテムが選択された時の処理
    @Override
    public boolean onOptionsItemSelected(Menu.Item item) {

       Double ido = 0.0;
       Double keido = 0.0;

       switch (item.getId()) {
           case 0:
            //     自分の居る位置(緯度、経度)を取得する
            LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
            Location location = locationManager.getCurrentLocation("gps");
            ido = location.getLatitude() * 1E6;
            keido = location.getLongitude() * 1E6;
            MapController mapController = this.mapView.getController();
            mapController.centerMapTo(new Point(ido.intValue(), keido.intValue()), true);
            return true;
       }

      return false;
    }
   
}