开发者

ANDROID: Help with LocationProvider

开发者 https://www.devze.com 2023-02-26 08:04 出处:网络
I am trying to acquire my location for an application I am working on. However I receive an error then force close when it tries to select the best provider.Any help on the issue would be much appreci

I am trying to acquire my location for an application I am working on. However I receive an error then force close when it tries to select the best provider. Any help on the issue would be much appreciated...do I need to declare something in onCreate in order for it to work? Here is a snippet of code followed by the error:

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

And here is the error:

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 and开发者_开发百科roid.location.LocationManager.getProvider(LocationManager.java:324)
04-16 19:07:25.077: ERROR/AndroidRuntime(4998):     at com.example.mapMain.onStart(mapMain.java:76)

EDIT: This is running on my OG Droid. When I click to open the map part of the application which gets the location it force closes.


The error indicates that no best provider was found, and the call to getBestProvider() returned null.

Although you didn't really specify any criteria, one would expect this call to at least return "something". The javadocs are a bit vague, and don't mention that this method can return null. (looking at the source code, it actually can return null)

However, it is possible that your app / device doesn't have any providers available. Can you execute the following call to check if it returns any providers (it will return all enabled providers, not taking into account any criteria) ?

locationManager.getProviders(true) 

Assuming this is a limitation of the application, double check if you have the following permissions defined, as they will be required to return some kind of provider.

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


In my case I was testing on a device that didn't have any location services enabled in system settings (Google location services, Standalone GPS services, VZW location services). Therefore requestLocationUpdates was causing the app to crash. I surrounded that code in a try/catch block, and the app no longer crashed.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号