Вопрос

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

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

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

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

Боковой вопрос: мой сервис запущен из моей 2-го деятельности. Я называю Стопсервис в Ондеровском методе этой деятельности. Если я вернусь к моей 1-й активности, и 2-я активность разрушается, я все еще замечаю значок GPS на моем телефоне. Останавливает услугу достаточно? Или мне нужно остановить местонаменитель в Ondestroy от службы?

Это было полезно?

Решение

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

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

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

и / или

locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)

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

На самом деле вы можете использовать два менеджера местоположения с разными поставщиками: один с GPS_Provider и другим с Network_Provider. GPS более точнее, но обычно работает только на открытом воздухе под свободным небом, почему Network_Provider работает в помещении, но менее точна. Кроме того, GPS может занять некоторое время до тех пор, пока он не получает первое исправление после инициализации (иногда то есть минуту или более), в то время как сеть получается почти сразу.

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

Что касается второго вопроса: перед тем, как остановить сервис, вы также должны отметить слушатель местоположения. Вы можете сделать это навергать или 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());
            }
        }
    }
}

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top