【问题标题】:IllegalArgumentException: provider doesn't exisit: null on Maps V1IllegalArgumentException:提供者不存在:Maps V1 上的 null
【发布时间】:2014-01-06 18:34:29
【问题描述】:

我正在使用 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); 

    }

我理解错误,但我的问题是,为什么设备给我这个错误?我该如何避免这种情况?

【问题讨论】:

  • 位置管理器跟google maps没关系,可能跟模拟器有关系
  • 您在哪一行得到异常?
  • 这里:locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

标签: android location location-provider


【解决方案1】:

当设备上不存在该提供商时,您正在向该网络提供商请求更新。您可以替换这两行:

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

您还使用零来表示时间和最小距离。这非常适合在虚拟设备上进行测试,但请记住在使用真实设备时更改它们,否则电池消耗会很高。

【讨论】:

  • 这只发生在模拟器中?如果没有 GPS 提供商,我如何在那里测试我的应用程序?
【解决方案2】:

建议解决此问题的方法是使用新的位置 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);
}

如果未启用提供程序,则它不会通过并且不会崩溃

【讨论】:

    【解决方案3】:

    如果提供程序不受支持,您会收到错误消息,解决此问题的最简单方法是使用 Criteria。

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

    在代码中

    criteria - 需要匹配的条件

    第二个参数是布尔值:

    enabledOnly - 如果为 true,则仅返回当前启用的提供程序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-29
      • 2016-01-26
      • 2019-11-17
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      相关资源
      最近更新 更多