2013-12-18 17 views
19

Sto utilizzando l'API V1 di Google Maps. ho questo errore:IllegalArgumentException: provider non esistente: null su Maps V1

 java.lang.IllegalArgumentException: provider doesn't exisit: null 

Questo è il mio codice:

locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    String provider = locationManager.getBestProvider(criteria, true); 

    if (provider != null) 
    { 

     startTime = System.currentTimeMillis(); 

     geoLocTimeOutTask = new GeoLocTimeOutTask(); 
     geoLocTimeOutTask.execute(); 

     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
    } 
    else 
    { 
     geoLocCallbackObj.geoLocationCallback(tagCallback); 

    } 

ho capito l'errore, bu la mia domanda è, whay il dispositivo mi ha messo questo errore? E come posso evitare questo per favore?

+2

Il responsabile della posizione non ha nulla a che fare con google maps e probabilmente ha a che fare con l'emulatore – tyczj

+0

su quale linea si sta verificando l'eccezione? – tyczj

+0

Qui: locationManager.requestLocationUpdates (LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); –

risposta

9

il suggerito è stato quello di risolvere questo problema sarebbe quella di utilizzare la nuova posizione API al posto di quello vecchio http://developer.android.com/google/play-services/location.html

ma in realtà tutto quello che dovete fare è fare un controllo

if(locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
} 

se il provider è non abilitato quindi non passerà e non si bloccherà

48

Si sta richiedendo aggiornamenti dal provider di rete quando quel provider non esiste sul dispositivo. È possibile sostituire queste due righe:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

con

locationManager.requestLocationUpdates(provider, 0, 0, locationListener); 

Hai già andato allo sforzo di trovare il miglior fornitore il dispositivo offre per i criteri in modo che è quello di utilizzare.

In alternativa, controllare il fornitore esiste prima di registrarsi per gli aggiornamenti da esso:

if (locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER)) 
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

if (locationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER)) 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

Si utilizza anche zero per tempo e distanza minima. Questo è perfetto per test su un dispositivo virtuale, ma ricordati di cambiarli quando usi un dispositivo reale, altrimenti lo scaricamento della batteria sarà alto.

+0

Questo succede solo nell'emulatore? Come posso testare la mia app quando non c'è un provider GPS? – powder366

2

Quando il provider non è supportato si ottiene un errore, il modo più semplice per risolvere questo problema è utilizzare un criterio.

locationManager.requestLocationUpdates(locationManager.(new Criteria(),true), 0, 0, locationListener); 

Nel codice

criteri - i criteri che devono essere abbinati

Il secondo arg che è un valore booleano:

enabledOnly - se vere gallina viene restituito solo un provider attualmente abilitato