我正在使用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); }
我理解错误,我的问题是,设备给我这个错误吗?我怎么能避免这个呢?
建议修复这个是使用新的位置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.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);
您还使用零时间和最小距离.这非常适合在虚拟设备上进行测试,但记得在使用真实设备时更改它们,否则电池消耗会很高.