Back to project page GRTRealtime.
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.
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) { } } }