2013-12-18 21 views
19

Google Maps API V1 kullanıyorum. bu hatayı var:IllegalArgumentException: sağlayıcı çıkmadı: null Maps V1 üzerinde

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

Bu benim kodudur:

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

    } 

hatası anlamak bu benim sorum, Whay cihaz bana bu hatayı koydu? Ve bundan nasıl kurtulabilirim lütfen? önerilen

+2

Yer yöneticisi google maps ile ilgisi yoktur ve muhtemelen emülatörü üzerinde özel durum alma hangi satır – tyczj

+0

ilgisi var? – tyczj

+0

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

cevap

9

bu eski bir http://developer.android.com/google/play-services/location.html

yerine yeni konumu API kullanmak olacaktır düzeltmek için ama gerçekten olan tüm sağlayıcı ise bu bir çek

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

yapmak yapmak etkin değil o zaman pas vermeyecek ve çakmayacaksınız

48

Bu sağlayıcıda cihaz bulunmadığında ağ sağlayıcısından güncellemeler talep ediyorsunuz. Bu iki satır değiştirebilirsiniz:

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

Bunu zaten kullanmak biridir böylece cihaz ölçütler için sunduğu en iyi sağlayıcı bulma çabası gittin

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

ile. Alternatif olarak, sağlayıcı kontrol

ondan güncellemeler için kayıt olmadan önce var: Ayrıca zaman ve minimum mesafe hem de sıfır kullandığınız

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

. Bu, sanal bir cihaz üzerinde test yapmak için mükemmeldir ancak gerçek bir cihaz kullanırken bunları değiştirmeyi unutmayın, aksi halde pil boşaltma yüksek olacaktır. sağlayıcı bu sorunu kurtulmak için bir hata, en kolay yolu olsun desteklenmez

+0

Bu yalnızca emülatörde mi oluyor? GPS sağlayıcısı olmadığında uygulamamı nasıl test edebilirim? – powder366

2

bir Kriterleri kullanmaktır. kodda

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

kriterleri -

boolean ikinci arg uyumlu olması gerekir kriterleri:

enabledOnly - gerçek tavuk halinde Yalnızca etkin olan bir sağlayıcı