Поиск GPS и предпочтения пользователя - PullRequest
0 голосов
/ 06 августа 2010

Я начинаю погружать свои пальцы в LocationManager. Я создал службу, которая отслеживает местоположение GPS (интервал более 60000 мс) и обновляет мое приложение, указав местоположение пользователя, чтобы они могли находить вещи поблизости.

Насколько я понимаю, пользователи могут перейти в свои настройки и отключить GPS для определенного приложения.

Я бы хотел предложить своим пользователям два режима. 1) GPS. 2) Если GPS не может тянуть, устройство не имеет чипа GPS, или GPS отключен для моего приложения , я хотел бы разрешить им ввести свой почтовый индекс (или, возможно, переключиться на вышку сотовой связи). поиск).

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

Дополнительный вопрос: моя служба запускается из моего 2-го занятия. Я вызываю stopService в методе onDestroy этой операции. Если я вернусь к своему 1-му занятию, а 2-е занятие будет уничтожено, я все равно замечу значок GPS на моем телефоне. Достаточно ли остановить сервис? Или мне нужно остановить LocationManager в onDestroy службы?

Ответы [ 2 ]

3 голосов
/ 06 августа 2010

Если у пользователя нет активированного GPS, он все равно может активировать Wi-Fi / сеть в качестве источника местоположения в настройках своего телефона, поэтому вы также можете использовать эти данные.

Вы всегда можете получитьПоследнее известное местоположение GPS или сети через

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

и / или

locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)

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

Вы можете использовать два менеджера местоположения с разными провайдерами: один с GPS_PROVIDER, а другой с NETWORK_PROVIDER.GPS более точный, но обычно работает только на улице под открытым небом, поэтому NETWORK_PROVIDER работает в помещении, но менее точно.Кроме того, GPS может занять некоторое время, пока он не получит первое исправление после инициализации (иногда, т. Е. Минуту или более), в то время как сеть узнает местоположение почти сразу.

Вы должны прочитать этот пост, это оченьподробный и имеет пример кода: Какой самый простой и надежный способ узнать текущее местоположение пользователя на Android?

По второму вопросу: перед остановкой службы вам следуеттакже отмените регистрацию слушателя местоположения.Вы можете сделать это onPause или onDestroy.

locationManager.removeUpdates(baseLocationListener)

или

locationManager.removeAllUpdates()

Я думаю, что в вашем случае использование getLastKnowLocation () подойдет.

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

final class GpsStatusListener implements GpsStatus.Listener {
    public void onGpsStatusChanged(int i) {

        if (i==GpsStatus.GPS_EVENT_FIRST_FIX) {
            Log.d(AskTingTing.APP, "gpsx.fixed.");
            for (GpsSatellite sat:locationManager.getGpsStatus(null).getSatellites()) {
                Log.d(AskTingTing.APP, "gpsx.GpsStatus.Sat.fixed: " + sat.usedInFix());
            }
        }
    }
}

Посмотрите на ссылку выше для хорошего примера кода.

1 голос
/ 06 августа 2010

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

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

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