Android Open Source - GRTRealtime Map Activity






From Project

Back to project page GRTRealtime.

License

The source code is released under:

MIT License

If you think the Android project GRTRealtime listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.lappdance.grtrealtime;
/*w  w  w. ja  v  a  2 s  . com*/
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Looper;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;

public class MapActivity extends FragmentActivity {

    /**
     * The lat/long coordinates for the transit hub at King & Victoria.
     * If the user hasn't enabled location services for this app, we'll use
     * these coordinates as the "current location".
     */
    private static final LatLng VICTORIA_TRANSIT_HUB = new LatLng(43.452846, -80.498223);

    private GoogleMap mMap; // Might be null if Google Play services APK is not available.
    private LocationManager mLocationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        setUpMapIfNeeded();

        mLocationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
        centerMapOnLastLocation();
        mLocationManager.requestSingleUpdate(getLocationProviderCriteria(), new UpdateMapLocationListener(), Looper.getMainLooper());
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }

    /**
     * Sets up the map if it is possible to do so (i.e., the Google Play services APK is correctly
     * installed) and the map has not already been instantiated.. This will ensure that we only ever
     * call {@link #setUpMap()} once when {@link #mMap} is not null.
     * <p/>
     * If it isn't installed {@link SupportMapFragment} (and
     * {@link com.google.android.gms.maps.MapView MapView}) will show a prompt for the user to
     * install/update the Google Play services APK on their device.
     * <p/>
     * A user can return to this FragmentActivity after following the prompt and correctly
     * installing/updating/enabling the Google Play services. Since the FragmentActivity may not
     * have been completely destroyed during this process (it is likely that it would only be
     * stopped or paused), {@link #onCreate(Bundle)} may not be called again so we should call this
     * method in {@link #onResume()} to guarantee that it will be called.
     */
    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
            }
        }
    }

    /**
     * This is where we can add markers or lines, add listeners or move the camera.
     * This should only be called once and when we are sure that {@link #mMap} is not null.
     */
    private void setUpMap() {
        mMap.setMyLocationEnabled(true);
    }

    Criteria getLocationProviderCriteria() {
        Criteria providerCriteria = new Criteria();
        providerCriteria.setHorizontalAccuracy(Criteria.ACCURACY_MEDIUM);
        providerCriteria.setCostAllowed(false);
        providerCriteria.setBearingRequired(false);
        providerCriteria.setAltitudeRequired(false);
        providerCriteria.setSpeedRequired(false);

        return providerCriteria;
    }

    /**
     * @return The user's last known location.
     * If we can't get a fix on the user's location, we'll treat the
     * King / Victoria transit hub as their last location.
     */
    private LatLng getLastLocation() {
        Location userLocation = mLocationManager.getLastKnownLocation(mLocationManager.getBestProvider(getLocationProviderCriteria(), true));
        if(userLocation != null) {
            return new LatLng(userLocation.getLatitude(), userLocation.getLongitude());
        }

        return VICTORIA_TRANSIT_HUB;
    }

    /**
     * Centers the map on the user's last known location.
     */
    private void centerMapOnLastLocation() {
        if(mMap != null) {
            LatLng location = getLastLocation();
            centerMap(location);
        }
    }

    private void centerMap(LatLng coords) {
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
                new LatLng(coords.latitude, coords.longitude), 16));
    }

    class UpdateMapLocationListener implements LocationListener {

        @Override
        public void onLocationChanged(Location location) {
            LatLng coords = new LatLng(location.getLatitude(), location.getLongitude());
            centerMap(coords);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }
    }
}




Java Source Code List

com.lappdance.grtrealtime.ApplicationTest.java
com.lappdance.grtrealtime.MapActivity.java
com.lappdance.grtrealtime.model.RouteTest.java
com.lappdance.grtrealtime.model.Route.java