ho ottenuto mappe V2 di lavoro utilizzando FragmentActivity
e SupportMapFragment
ma ora sto cercando di farlo non funziona utilizzando il precedente ma con MapView
. I documenti di Maps sembrano dire che puoi farlo in entrambi i modi.Non è possibile ottenere la mappa di Google Maps V2 MapView
L'app viene eseguita, ma ottengo solo una schermata nera, nessuna mappa.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.google.android.gms.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
Il file Java:
package com.jps.mapstestthree;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.LayoutInflater;
import android.content.Context;
import com.google.android.gms.maps.*;
import com.google.android.gms.maps.model.*;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
public class MainActivity extends Activity
implements OnMapReadyCallback
{
private GoogleMap googleMap;
private View view;
private MapView mapView;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
context = (Context)getApplication();
LayoutInflater inflater =(LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.activity_main, null);
mapView = (MapView)view.findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
initilizeMap();
}
catch (Exception e)
{
}
}
private void initilizeMap()
{
if (googleMap == null)
{
mapView.getMapAsync(this);
}
}
@Override
protected void onResume()
{
mapView.onResume();
super.onResume();
initilizeMap();
}
@Override
public void onMapReady(GoogleMap map)
{
map.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
}
}
mio AndroidManifest.xml è invariato rispetto a quando l'ho fatto usando Frammenti quindi so che la chiave, e tutto il resto, sta lavorando.
E ho rimosso il supporto v4 .jar poiché non ne avevo bisogno se Frammenti dove non utilizzati.
ho provato avendo gli altri metodi, come onDestory()
, definito, dal momento che sembrava volere tutti loro per fare il forwarding MapView
, ma lamentava loro, così li ho rimossi.
E ho provato a fare più cose in onMapReady()
, ma non lo faceva sembra fare molto bene.
Esistono pochissimi esempi di utilizzo di MapView
per V2.
È possibile visualizzare una mappa senza utilizzare Fragment e utilizzare MapView?
In tal caso, cosa devo fare per ottenere qualcosa?
Update 1:
Ho provato parecchie più cose, ma ancora senza fortuna. Ho aggiunto tutto il public final void onDestroy()
inoltrato ecc. questa volta non si è lamentato e, in Logcat, sembrava che stesse ancora tentando di fare riferimento a Fragment nel supporto v4 .jar, così ho persino aggiunto il supporto v4. jar, ha rifatto un progetto di aggiornamento Android con --subprojects, e ancora ottengo uno schermo nero , ma ha il titolo.
Sì, è lo stesso progetto, ho appena rinominato il nome del progetto principale, il nome del pacchetto è lo stesso, e la chiave è la stessa di quando ha funzionato.
Ho anche rimosso le importazioni principali con le mappe. * E ho aggiunto le singole necessarie e ha eseguito una compilazione pulita.
UPDATE 2:
ho finalmente capito di lavoro senza utilizzare il supporto .jar v4! E tutti i frammenti. Ho trovato la fonte di esempio RawMapViewDemo.java
negli esempi di servizi di riproduzione , ho cambiato l'app in modo che utilizzasse, in pratica, "progetto di aggiornamento Android" con --subprojects, e ha funzionato !!
Ecco la fonte completa, nella speranza che possa aiutare qualcuno.
package com.jps.mapstestthree;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
public class MainActivity extends Activity
implements OnMapReadyCallback
{
// Google Map
private GoogleMap googleMap;
private View view;
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = (MapView)findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
protected void onResume()
{
super.onResume();
mapView.onResume();
}
@Override
public void onMapReady(GoogleMap map)
{
map.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
}
@Override
public final void onDestroy()
{
mapView.onDestroy();
super.onDestroy();
}
@Override
public final void onLowMemory()
{
mapView.onLowMemory();
super.onLowMemory();
}
@Override
public final void onPause()
{
mapView.onPause();
super.onPause();
}
}
Qualcosa nel logcat? Firma con la stessa chiave di debug di quando funzionava? – stkent
I frammenti si comportano allo stesso modo delle attività. Inoltre, è il modo più semplice per implementare le mappe se non è l'unico modo. Forse puoi trovare un altro modo che ti piace su questa documentazione. [** doc **] (https://developers.google.com/maps/documentation/android/) Puoi provare anche questo. [** Link **] (https://gist.github.com/joshdholtz/4522551) –
L'aggiornamento con la tua soluzione sarebbe stato pubblicato più appropriatamente come risposta. – dm78