4

我的代码片段是:

mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(mLocationManager.getProvider(LocationManager.GPS_PROVIDER) != null) {
    mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
}

mLocationManager.addTestProvider(LocationManager.GPS_PROVIDER,
            "requiresNetwork" == "", "requiresSatellite" == "",
            "requiresCell" == "", "hasMonetaryCost" == "",
            "supportsAltitude" == "", "supportsSpeed" == "",
            "supportsBearing" == "",

android.location.Criteria.POWER_LOW,
        android.location.Criteria.ACCURACY_FINE);

location = new Location(LocationManager.GPS_PROVIDER);

mLocationManager.setTestProviderEnabled(
        LocationManager.GPS_PROVIDER, true);

// mLocationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER,
// location);

location.setLatitude(FinalLatitudeIntArray[0]);
location.setLongitude(FinalLongitudeIntArray[0]);
mLocationManager.setTestProviderLocation(
        LocationManager.GPS_PROVIDER, location);

我收到错误:

java.lang.IllegalArgumentException: Provider "gps" unknown
at android.os.Parcel.readException(Parcel.java:1326)
at android.os.Parcel.readException(Parcel.java:1276)
at android.location.ILocationManager$Stub$Proxy.removeTestProviderEnabled(ILocationManager.java:1097)
at android.location.LocationManager.removeTestProviderEnabled(LocationManager.java:1130)

请帮我解决这个错误。添加。早些时候应用程序运行良好,但是当我重新启动系统时,应用程序开始显示错误。

4

2 回答 2

3

来自位置管理器上的 Android 文档:

removeTestProvider() throws 
IllegalArgumentException    if no provider with the given name exists

因此,如果您在模拟器上进行测试,GPS 的设置可能已在重新启动时被重置(尝试检查您的权限和 DDMS 以再次启用它)。如果在设备上,您必须禁用 GPS(转到设置并启用 GPS)。

编辑:找到相关的东西:这里。基本上,模拟器中发生了一些似乎不稳定的事情。从该线程的评论中,尝试使用Criteria.ACCURACY_FINE而不是LocationManager.GPS_PROVIDER,例如:

    LocationManager 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 ) {
        Log.e( TAG, "No location provider found!" );
        return;
    }

浏览该线程以获取更多信息。

于 2012-11-25T09:39:25.583 回答
1

我遇到了同样的问题,因为现在有些设备没有 GPS。'varevarao' 提到了一个好方法,但如果我使用标准方法,我也会遇到问题。在某些设备上,它仍然在“getBestProvider”处返回空值(参见下面的代码)。

    Criteria criteria = new Criteria();
    criteria.setAccuracy( Criteria.ACCURACY_FINE );
    String provider = locationManager.getBestProvider( criteria, false );

    if ( provider == null ) {
        criteria.setAccuracy( Criteria.ACCURACY_COARSE );
        provider = locationManager.getBestProvider( criteria, true );
        Log.d( "Function", "No location provider found!" );
        return;
    }

我这样做是为了解决它(见下面的代码)。不确定这是否是最好的方法,但它目前对我有用。它的工作原理是获取设备上可用的“位置提供者”列表,然后获取第一个(应该没关系,因为我只是将它用于模拟位置)。

   List<String> tmpProviders = locationManager.getAllProviders();

   if (!tmpProviders.isEmpty() && tmpProviders.toArray()[0] != null && !tmpProviders.toArray()[0].toString().isEmpty() ) {
      mocLocationProvider = tmpProviders.toArray()[0].toString();
  } else {// your error goes here }
于 2013-01-29T16:11:25.307 回答