Подтвердить что ты не робот

IllegalArgumentException: поставщик не существует: null на Maps V1

Я использую API Карт Google 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); 

    }

Я понимаю ошибку, буй вопрос мой, а что это заставило меня поставить эту ошибку? И как я могу избежать этого, пожалуйста?

4b9b3361

Ответ 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);

Вы также используете нуль для времени и минимального расстояния. Это идеально подходит для тестирования на виртуальном устройстве, но не забудьте изменить их при использовании реального устройства, иначе утечка аккумулятора будет высокой.

Ответ 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

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

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

В коде

критерии - критерии, которые необходимо согласовать

Второй аргумент, который является логическим:

enabledOnly - если true, возвращается только поставщик, который в настоящий момент включен.