ANDROID:帮助LocationProvider

时间:2011-04-16 23:19:23

标签: android geolocation location locationmanager location-provider

我正在尝试获取我正在处理的应用程序的位置。但是,当我尝试选择最佳提供程序时,我收到错误然后强制关闭。对此问题的任何帮助都将非常感激...我是否需要在onCreate中声明一些内容才能使其正常工作?这是一段代码,后跟错误:

public void onStart(){
    super.onStart();
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    best = locationManager.getBestProvider(criteria, true);//Selects best location provider given options between GPS and poor man's
    locationProvider = locationManager.getProvider(best);

        if (locationProvider != null) {
            locationManager.requestLocationUpdates(locationProvider.getName(), 60000, 1,
                this.locationListenerRecenterMap);
        } else {
            Log.e(TAG, "NO LOCATION PROVIDER AVAILABLE");
            Toast.makeText(this, "The GPS location provider is not available at this time.", Toast.LENGTH_SHORT).show();
            finish();
        }

    GeoPoint location = this.getLastKnownPoint();
    this.mapController.animateTo(location);
}
public void onResume(){
    super.onResume();
    locationManager.requestLocationUpdates(best, 15000, 1, (LocationListener) this);
}
public void onPause(){
    locationManager.removeUpdates((LocationListener) this);
}
private GeoPoint getLastKnownPoint(){
    GeoPoint lastKnownPoint = GeoUpdateHelper.SCRANTON;
    Location lastKnownLocation = this.locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if(lastKnownLocation != null){
    lastKnownPoint = GeoUpdateHelper.getGeoPoint(lastKnownLocation);
    }else{
        lastKnownPoint = GeoUpdateHelper.SCRANTON;
    }
    return lastKnownPoint;
}

这是错误:

04-16 19:07:25.077: ERROR/AndroidRuntime(4998): Caused by: java.lang.IllegalArgumentException: name==null
04-16 19:07:25.077: ERROR/AndroidRuntime(4998):     at android.location.LocationManager.getProvider(LocationManager.java:324)
04-16 19:07:25.077: ERROR/AndroidRuntime(4998):     at com.example.mapMain.onStart(mapMain.java:76)

编辑:这是在我的OG Droid上运行的。当我单击打开应用程序的地图部分时,它会强制关闭该位置。

2 个答案:

答案 0 :(得分:4)

错误表明找不到最佳提供程序,并且对getBestProvider()的调用返回null。

虽然你没有真正指定任何标准,但人们会期望这个调用至少会返回“某事”。 javadocs有点模糊,并没有提到这个方法可以返回null。 (查看source code,它实际上可以返回null)

但是,您的应用/设备可能没有任何提供商。 您是否可以执行以下调用以检查它是否返回任何提供者(它将返回所有已启用的提供者,而不考虑任何条件)?

locationManager.getProviders(true) 

假设这是应用程序的限制,请仔细检查您是否定义了以下权限,因为他们将需要返回某种类型的提供程序。

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  

答案 1 :(得分:0)

在我的情况下,我正在测试未在系统设置中启用任何位置服务的设备(Google位置服务,独立GPS服务,VZW位置服务)。因此requestLocationUpdates导致应用崩溃。我在try / catch块中包含了该代码,并且应用程序不再崩溃。