2015-01-30 7 views
5

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

Qualcosa nel logcat? Firma con la stessa chiave di debug di quando funzionava? – stkent

+0

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) –

+0

L'aggiornamento con la tua soluzione sarebbe stato pubblicato più appropriatamente come risposta. – dm78

risposta

10

L'aggiornamento alla tua domanda lascia un alone di mistero intorno a come avete risolto questo.

Tutto ciò che serve è quello di seguire il API docs e in avanti (almeno gli specificate) callback del ciclo di vita delle attività genitore o Frammento alla MapView:

Gli utenti di questa categoria devono inoltrare tutti i metodi del ciclo di vita da Activity o Fragment contenenti questa vista ai corrispondenti in questa classe. In particolare, è necessario inoltrare i seguenti metodi:

  • onCreate(Bundle)
  • onResume()
  • onPause()
  • onDestroy()
  • onSaveInstanceState()
  • onLowMemory()

E, naturalmente, utilizzare MapView#getMapAsync(OnMapReadyCallback) come specificato nello API docs per ottenere un riferimento allo MapView utilizzato da MapView.

Problemi correlati