android - una - Reemplace getMap con getMapAsync
meta data android name com google android maps v2 api_key (3)
Quiero reemplazar el método obsoleto getMap
con getMapAsync
, pero no getMapAsync
, pero sí GoogleMap
:
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
try {
if(googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
}
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMyLocationEnabled(true);
googleMap.setTrafficEnabled(true);
googleMap.setIndoorEnabled(true);
googleMap.setBuildingsEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
Si reemplazo el googleMap
con MapFragment
esta manera, ya no puedo setMapType
etc. Entonces, ¿cómo puedo cambiar a getMapAsync
en mi caso?
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
Muy simple, simplemente OnMapReadyCallback
que su Actividad implemente la interfaz OnMapReadyCallback
, y luego asigne su referencia de googleMap
en la devolución de llamada onMapReady()
.
Luego, realice cualquier acción en googleMap
que desee.
Aquí hay un ejemplo simple:
public class MainActivity extends Activity implements OnMapReadyCallback {
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
googleMap = map;
setUpMap();
}
public void setUpMap(){
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setMyLocationEnabled(true);
googleMap.setTrafficEnabled(true);
googleMap.setIndoorEnabled(true);
googleMap.setBuildingsEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
}
}
Si usa MapFragment, puede usar el método stMapType. Implemente OnMapReadyCallback en su actividad. Cree MapFragment y llame al método getAsyncMap en ese objeto. Te pedirá que implementes el método MapReady (mapa GoogleMap) allí puedes establecer el tipo de mapa, etc. Espero eso ayude.
como en el documento oficial, obtener el mapa asíncrono requiere una devolución de llamada; ¡está ahí su "punto de entrada principal" para cosas de google maps!
public class MapPane extends Activity implements OnMapReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map_activity);
MapFragment mapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap map) {
// DO WHATEVER YOU WANT WITH GOOGLEMAP
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
map.setMyLocationEnabled(true);
map.setTrafficEnabled(true);
map.setIndoorEnabled(true);
map.setBuildingsEnabled(true);
map.getUiSettings().setZoomControlsEnabled(true);
}
}