Google Maps Android API v2 – restaurar el estado del mapa

Estoy construyendo una aplicación de mapa muy simple usando Google Maps Android API v2. Como era de esperar, cuando el usuario abandona y luego regresa a la aplicación, los cambios que hayan realizado en la ubicación, el zoom, etc. se pierden a medida que la actividad se destruye y se vuelve a crear.

Sé que puedo guardar el estado de la cámara del mapa de forma programática (tal vez como valores en las preferencias compartidas) en onPause() y restaurarlo en onResume() , pero ¿tiene el API algún mecanismo incorporado para mantener el estado del mapa entre los lanzamientos de actividad?

No creo que puedas, pero puedes guardar tu CameraPosition que tiene tu Position / Zoom / Angle …

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

Por lo que puede escribir una función en su onDestroy que obtiene la CameraPosition de su mapa y lo almacena en SharedPreferences . En su onCreate() , CameraPosition a crear su CameraPosition desde SharedPreferences (después de instanciar su mapa).

 // 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(); } 

En su 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 

Crear una nueva cámaraPosition y animarla. Estar seguro, el mapa es instanziated en ese punto

  map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

No hay nada en la API para este caso de uso.

Puede probar esta biblioteca: https://github.com/fsilvestremorais/android-complex-preferences

No será tan eficiente como sólo escribir un montón de SharedPreferences.Editor.put... para los valores de CameraPosition en onPause , ya que utiliza Gson internamente, pero ahorra tiempo si tiene un objeto más complejo para guardar y restaurar.

De todos modos, también puede publicar una solicitud de función en gmaps-api-issues (o Android Maps Extensions ). Sin duda es algo que falta para persistir objetos simples ( CameraPosition , LatLng , LatLngBounds ) con facilidad.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.