前のやつGoogle Maps Android V2 でルート検索では、 地図上の2点タップでルートを決めてましたが、今回は出発地は「現在位置」で、到着地は4パターンで決めるようにしました。

1:以前と同様にタップして指定

2:住所で指定

3:ランドマーク検索で指定

4:緯度,経度でダイレクトに指定






起動時の初期画面、現在地を測位後マーカーを表示します。



到着地点をタップして指定する場合(1)



その他の指定(2~4)

メニュのArrivalを選び、フィールドに入力します。



住所・ランドマーク・緯度,経度の3パターン





誤タップなどが無いようにするには、地図上でロングプレス(長押し)します。

マーカーがグレイに変わります。



これで、ズームでダブルタップに失敗しても大丈夫。



元に戻すには再度ロングプレス、色が戻ります。




ルート検索は以下の場合に実行されます。

1:到着地点が指定された場合

2:到着地点が変更された場合

3:到着地点指定後、1分間隔で実行

4:トラベルモードが変更された場合


トラベルモードの変更







現在のトラベルモードの確認は、タイトルバーに表示されている画像でできます。




渋滞状況の表示






有料(高速)道路や橋の使用について








新しいonLocationChanged()のコード(例)


・・・・・・・

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
import com.google.android.gms.location.LocationClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.maps.model.CameraPosition;

public class MainActivity extends FragmentActivity implements OnConnectionFailedListener, LocationListener, ConnectionCallbacks {

    GoogleMap gMap;

    private LocationClient mLocationClient = null;
    private static final LocationRequest REQUEST = LocationRequest.create()
            .setInterval(5000) 
            .setFastestInterval(16) 
            .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    
        LocationManager locationManager;
        String provider;
        SupportMapFragment mapfragment;


    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
        mapfragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
            
            
            gMap = mapfragment.getMap();
            
            //ノーマル
            gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        
        gMap.setMyLocationEnabled(true);
          
            locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
            
            
            mLocationClient = new LocationClient(getApplicationContext(), this, this);
            if (mLocationClient != null) {
                mLocationClient.connect();
            }
        
    }

    @Override
        public void onPause(){
        super.onPause();
        if (locationManager != null) {
            mLocationClient.disconnect();
            
        }
    }
    
    @Override
    public void onLocationChanged(Location location) {
            // 現在地に移動
            CameraPosition cameraPos = new CameraPosition.Builder()
                .target(new LatLng(location.getLatitude(), location.getLongitude())).zoom(17.0f)
                .bearing(0).build();
            gMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPos));
            

    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
    // TODO Auto-generated method stub
    }

    @Override
    public void onConnected(Bundle connectionHint) {
        // TODO Auto-generated method stub
        mLocationClient.requestLocationUpdates(REQUEST,this); // LocationListener
    }

    @Override
    public void onDisconnected() {
        // TODO Auto-generated method stub
    }
    
}




インストール

Target:Android 2.3.3 or later

動作確認実機:Xperia acro(docomo) Android 2.3.4



アプリをQRコードからインストールする方法はコチラを参照


タブレットの場合

QRコードでダウンロードすると、Downloadフォルダー内でzipファイルになってインストールできない状態の場合があります。

その場合は、拡張子のzipをapkに変更してファイル名をタップすればインストール用のダイアログが出ますので、そこからインストールしてください。