2013-12-18 4 views
19

私はGoogle Maps API V1を使用しています。 私はこのエラーを持っている:IllegalArgumentException:プロバイダーが存在しない:マップV1でnull

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

は、これは私のコードです:

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

    } 

私はエラーを理解し、府私の質問は、デバイスが私にこのエラーを置くwhay、ありますか?どうすればこの問題を回避できますか?提案

+2

ロケーションマネージャはGoogleマップとは関係がありません。おそらくエミュレータ – tyczj

+0

と例外がありますか? – tyczj

+0

ここに:locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER、0、0、locationListener); –

答えて

9

が、これはプロバイダがある場合、あなたがそれをしなければならないすべては、チェックに

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

を行う代わりに、古い1 http://developer.android.com/google/play-services/location.html

が、本当にの新しい場所のAPIを使用することです修正しました有効になっていないと、成功しなくなり、クラッシュすることはありません。

48

ネットワークプロバイダがデバイスに存在しない場合は、ネットワークプロバイダからの更新を要求しています。あなたはすでにそれを使用するためのものですので、デバイスは、あなたの基準のために提供しています最高のプロバイダを見つける努力を行ってきた

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

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

:あなたはこれらの2行を置き換えることができます。

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

ます。また、時間と最短距離の両方のためにゼロを使用している:

また、プロバイダはそれからの更新のために登録する前に存在して確認してください。これは、仮想デバイスでのテストには最適ですが、実際のデバイスを使用している場合は変更することを忘れないでください。そうしないと、バッテリの消費量が多くなります。

+0

これはエミュレータでのみ発生しますか? GPSプロバイダがないときに私のアプリをそこでテストするにはどうしたらいいですか? – powder366

2

プロバイダがサポートされていない場合は、エラーが発生します。この問題を解決する最も簡単な方法は、基準を使用することです。コードで

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

基準 -

ブール値である第二引数一致する必要が基準:

enabledOnlyを - trueの場合は鶏現在有効になっているプロバイダのみが返されます

関連する問題