我使用的是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);
}
我理解这个错误,但我的问题是,设备是怎么把这个错误放在我身上的?我怎样才能避免这种情况呢?
发布于 2013-12-18 22:39:53
当设备上不存在网络提供商时,您正在向该网络提供商请求更新。您可以替换这两行:
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);
您还使用零表示时间和最小距离。这对于在虚拟设备上测试是完美的,但请记住在使用真实设备时更改它们,否则电池消耗将很高。
发布于 2013-12-18 22:39:07
建议的解决方法是使用新的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);
}
如果提供程序未启用,则它不会通过,也不会崩溃
https://stackoverflow.com/questions/20660561
复制相似问题