LocationManager requestLocationUpdates и timertask в Android - PullRequest
3 голосов
/ 28 августа 2010

У меня есть следующий код:

if (gps_enabled) {
        Log.e("$$$$$$$$$$$$$$",
                "GPS is enabled requestion location updates... interval value is: "
                        + interval);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
                locationListenerGps);
    }
    else{
        if (network_enabled) {
            Log.e("$$$$$$$$$$$$$$",
                    "Network is enabled requestion location updates... interval value is: "
                            + interval);
            lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,
                    0, locationListenerNetwork);
        }
    }

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

timer1.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            getLocation();
        }

    }, 0, 180000);// 3 minutesr...

где getLocation - это метод, который я вызвал ранее, но когда таймер вызывает этот метод, ничего не происходит, журналы на этом останавливаются

Log.e("$$$$$$$$$$$$$$",
                    "Network is enabled requestion location updates... interval value is: "
                            + interval);

и я никогда не получаю уведомления о моем местонахождении. Есть идеи?

1 Ответ

7 голосов
/ 29 августа 2010

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

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