Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Maps Android API v2 - restoring map state

I'm building a very simple map app using Google Maps Android API v2. As expected, when the user leaves and then returns to the app, any changes they've made in location, zoom, etc. are lost as the activity is destroyed and re-created.

I know I can save the map's camera state programmatically (perhaps as values in shared preferences) in onPause() and restore it in onResume(), but does the API have any built-in mechanism for persisting map state between activity launches?

like image 738
David Gassner Avatar asked May 22 '13 17:05

David Gassner


People also ask

How do I restore my Google Maps?

Procedure for Android 4.1. Go into the applications manager. Press on the options button (bottom left of screen) to display a menu. Press on Reset preferences. Having read the warning message, press on the Reset applications button.

Why is my map not updating?

Restart the app The first thing to try is restarting the app. Completely close the app, then tap its tile to start Google Maps again so that it re-syncs with Google's servers. This tends to solve the problem for most iPhone users. You can also try restarting your phone completely.


1 Answers

I don't think you can, but you can save your CameraPosition which has your Position/Zoom/Angle...

http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html

so you can write a function in your onDestroy which gets the CameraPosition from your map and store it in your SharedPreferences. In your onCreate() you recreate your CameraPosition from the SharedPreferences (after your map is instanciated).

// somewhere in your onDestroy()
@Override
protected void onDestroy() {
    CameraPosition mMyCam = MyMap.getCameraPosition();
    double longitude = mMyCam.target.longitude;
    (...)

    SharedPreferences settings = getSharedPreferences("SOME_NAME", 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putDouble("longitude", longitude);
    (...) //put all other values like latitude, angle, zoom...
    editor.commit();
}

in your onCreate()

SharedPreferences settings = getSharedPreferences("SOME_NAME", 0);
// "initial longitude" is only used on first startup
double longitude = settings.getDouble("longitude", "initial_longitude");  
(...)  //add the other values

LatLng startPosition = new LatLng() //with longitude and latitude


CameraPosition cameraPosition = new CameraPosition.Builder()
.target(startPosition)      // Sets the center of the map to Mountain View
.zoom(17)                   // Sets the zoom
.bearing(90)                // Sets the orientation of the camera to east
.tilt(30)                   // Sets the tilt of the camera to 30 degrees
.build();                   // Creates a CameraPosition from the builder

create a new cameraPosition and animate it. be sure, map is instanziated at that point

 map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
like image 118
longi Avatar answered Sep 22 '22 11:09

longi