OnProviderEnabled вызывается только в том случае, если слушатель зарегистрирован для этого провайдера?

Вопрос прост: Для вызова метода onProviderEnabled () прослушивателя местоположения при включении определенного поставщика, должен ли этот прослушиватель уже запрашивать обновления у этого же поставщика?

Например, если вы регистрируетесь для получения обновлений местоположения с помощью диспетчера местоположения от сетевого провайдера:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,
                0, locationListener);

У слушателя есть метод onProviderEnabled ():

@Override
    public void onProviderEnabled(String provider) {
        Log.d(TAG, provider + " provider enabled"); }

Если я сейчас включу поставщика местоположения GPS, будет ли вызываться onProviderEnabled?

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

Можно ли регистрироваться для получения обновлений от поставщика данных о местоположении, который еще не включен?


person Flyview    schedule 12.12.2012    source источник


Ответы (1)


Чтобы метод onProviderEnabled () прослушивателя местоположения был вызван при включении определенного поставщика, должен ли этот прослушиватель уже запрашивать обновления у этого же поставщика?

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

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

Можно ли регистрироваться для получения обновлений от поставщика данных о местоположении, который еще не включен?

да.

person Luis    schedule 12.12.2012
comment
Спасибо. Вся причина, по которой я проверяю, заключается в том, что я подумал, что, возможно, регистрация на провайдера местоположения, который не включен, что-то ломает в моем приложении. Редко кажется, что мои провайдеры местоположения застревают и не предоставляют новых местоположений. Странно то, что карты Google по-прежнему работают нормально. Однако в моем приложении слушатели местоположения прекрасно регистрируются у обоих провайдеров, но новых местоположений не обнаруживается, пока я не перезапущу телефон! Перезапуск / удаление / очистка данных в приложении не решает проблему. Когда это происходит, GPS перестает работать для любых приложений, а GPSLocationProvider не дает телефону спать. - person Flyview; 13.12.2012
comment
Я должен вам сказать, что я никогда не сталкивался с чем-то подобным, что не было бы результатом ошибки в моем приложении. Сначала вы сказали, что карты Google по-прежнему работают, а затем что он остановился для всех приложений. Вы можете уточнить? Вы регистрируете слушателя в Service или Thread классе? Это может привести к аналогичным ситуациям. - person Luis; 13.12.2012
comment
Местоположение сети работает в картах Google, но GPS также не отображается на картах Google (как если бы он выключен). Однако отключение GPS может быть отдельной проблемой. Я задал новый вопрос: stackoverflow.com/ questions / 13849748 / - person Flyview; 13.12.2012