ANDROID: Помощь с LocationProvider - PullRequest
1 голос
/ 17 апреля 2011

Я пытаюсь получить свое местоположение для приложения, над которым я работаю.Однако я получаю сообщение об ошибке, после чего принудительно закрываю, когда пытается выбрать лучшего провайдера.Любая помощь в этом вопросе будет высоко ценится ... мне нужно объявить что-то в 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 ]

4 голосов
/ 17 апреля 2011

Ошибка указывает на то, что лучший поставщик не был найден, и вызов getBestProvider () возвратил ноль.

Хотя вы не указали никаких критериев, можно ожидать, что этот вызов по крайней мере вернет «что-то». Javadocs немного расплывчаты, и не упоминайте, что этот метод может возвращать ноль. (глядя на исходный код , на самом деле он может вернуть ноль)

Однако возможно, что в вашем приложении / устройстве нет доступных провайдеров. Можете ли вы выполнить следующий вызов, чтобы проверить, возвращает ли он каких-либо провайдеров (он вернет всех включенных провайдеров, не принимая во внимание какие-либо критерии)?

locationManager.getProviders(true) 

Предполагая, что это ограничение приложения, дважды проверьте, определены ли следующие разрешения, так как они потребуются для возврата какого-либо поставщика.

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  
0 голосов
/ 30 апреля 2013

В моем случае я проводил тестирование на устройстве, в котором не были включены службы определения местоположения в настройках системы (службы определения местоположения Google, автономные службы GPS, службы определения местоположения VZW). Поэтому requestLocationUpdates вызывал сбой приложения. Я окружил этот код в блоке try / catch, и приложение больше не зависало.

...