Google Maps API V1を使用しています。私はこのエラーがあります:
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);
}
私はエラーを理解していますが、私の質問は、デバイスが私にこのエラーを配置したのはなぜですか?そして、どうすればこれを回避できますか?
ネットワークプロバイダーがデバイスに存在しない場合、そのプロバイダーに更新を要求します。次の2行を置き換えることができます。
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
と
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
あなたは、デバイスがあなたの基準に提供する最高のプロバイダーを見つける努力にすでに取り組んでいるので、それが使用するものです。
または、プロバイダーの更新を登録する前に、プロバイダーが存在することを確認します。
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);
また、時間と最小距離の両方にゼロを使用しています。これは仮想デバイスでのテストに最適ですが、実際のデバイスを使用する場合は忘れずに変更してください。変更しないと、バッテリーの消耗が大きくなります。
これを修正することを提案しましたが、古いAPIの代わりに新しいLocation APIを使用することになります http://developer.Android.com/google/play-services/location.html
しかし、実際に行う必要があるのは、チェックを実行することだけです。
if(locationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER) && locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
プロバイダーが有効になっていない場合、それは通過せず、クラッシュしません
プロバイダーがサポートされていない場合、エラーが発生します。この問題を解決する最も簡単な方法は、基準を使用することです。
locationManager.requestLocationUpdates(locationManager.(new Criteria(),true), 0, 0, locationListener);
コードで
基準-一致する必要がある基準
ブール値である2番目の引数:
enabledOnly-trueの場合、現在有効なプロバイダーのみが返されます