2017-01-19 7 views
1

Мое приложение имеет карту, и когда пользователь долго нажимает на нее, мне нужно, чтобы текущее местоположение телефона отображалось на карте. Как @Chen advised похоже, что getCurrentLocation() - правильный метод для использования в моем случае. Обратите внимание, что я не хочу использовать LocationListener, потому что я хочу, чтобы у пользователя был контроль, когда они хотят обновить свое местоположение.Как я могу прервать метод getCurrentLocation (Codename One Location Manager)?

Кроме того, я выбрал это обновление местоположения вручную, потому что @ Shai-Almog discouraged location polling. Таким образом, после прочтения этого post я первый установить тайм-аут на 20 секунд, как написано ниже, чтобы получить текущее местоположение телефона:

   Dialog ip = new InfiniteProgress().showInifiniteBlocking(); 
       Location currentLocation = locationManager.getCurrentLocationSync(
         ParametresGeneraux.LOCATION_TIMEOUT_MILLI); 
       // We try to get something 
       if (currentLocation == null) { 
        currentLocation = locationManager.getLastKnownLocation(); 
       } 
       ip.dispose(); 

Но это не было достаточно, и последнее известное место было «всегда» при условии (я не считал возможно, 5 раз подряд), хотя значок маленького местоположения появился на панели инструментов. Поэтому я установил его на 40 с, но фактическое текущее местоположение не пришло ни после этого в два раза больше времени (было предоставлено только последнее известное место на расстоянии> 2 км).

Однако, если я запустил Карты Google на Android (KitKat), местоположение моментально точно. И затем, если я вернусь к своему приложению и нажимаю на карту, текущее местоположение будет найдено. На самом деле я нашел post, касающийся разницы в точности между Google Maps и Android API, но это было связано с Shangai/China, а не с ЕС (Франция).

Следовательно, мой вопрос имеет два аспекта:

  1. первым, как может быть такая огромная разница в том же устройстве между Google Maps и Codename One?

  2. , то если я не устанавливаю тайм-аут на getCurrentLocation(), как я могу прерывать поиск местоположения, когда пользователь устал ждать?

Любая помощь приветствуется,

BR

ответ

1

Мгновенное место будет работать, если место службы Google Maps включен. Если вы включили или отключили один из подсказок сборки android.playService, вы также должны включить android.playService.location=true, чтобы получить услугу быстрого определения местоположения, используемую картами.

+0

Удивительно, спасибо тонне @Shai! Добавление android.playService.location = true к подсказкам построения делает текущее местоположение более быстрым ([подробнее об блоге CN1] (https://www.codenameone.com/blog/ а-спасибо-вам-в-важное-обновление-на-андроид-builds.html)). Пока это пока неточно, но Google Maps не работает, поэтому я не могу сравнивать. Кстати, вы видели мой другой вопрос (http://stackoverflow.com/questions/41695584/buttons-in-codename-one-form-inactive-on-android-actual-device-but-work-under- си)? – HelloWorld

+0

Я пропустил этот вопрос, не забыли ли вы пометить его изначально? –

+0

Нет, я не забыл, был просто удивлен, потому что вы всегда отвечаете быстро. В любом случае спасибо за ответ! – HelloWorld