Flutter-geolocator: Android Pie (API 28) Geolocator (). GetCurrentPosition () не возвращает

Созданный на 2 нояб. 2018  ·  39Комментарии  ·  Источник: Baseflow/flutter-geolocator

🐛 Отчет об ошибке

Когда я запускаю Geolocator (). GetCurrentPosition () в эмуляторе Android с Android Pie (API 28), вызов вообще не возвращается.

Я запускаю тот же код на API 27, местоположение возвращается нормально. Пробовал создать новый эмулятор, ничего не меняется.

Конфигурация

Эмулятор Android с Android Pie (API 28)

Версия: 2.1.0

Платформа:

  • []: iphone: iOS
  • [X]: робот: Android

Самый полезный комментарий

У меня такая же проблема, и я установил тайм-аут для работы. Когда истекло время ожидания, я вызываю getLastKnownPosition ()

Geolocator().getCurrentPosition().timeout(Duration(seconds: 10)).then((position) {
      //getting position without problems
      print(position);
    }).catchError((error) {
      if (error is TimeoutException) {
        Geolocator().getLastKnownPosition().then((position) {
          //getting last known position
          print(position);
        }).catchError((error) {
          //handle the exception
        });
      } else {
        //handle the exception
      }
    });

Вы также можете сделать то же самое с потоком

Все 39 Комментарий

я тоже, что не так? :(

То же самое!

@savjolovs, если я отлаживаю, отладчик останавливается на Geolocator (). getCurrentPosition (). Точки останова после метода не достигаются. Вы можете подтвердить такое поведение?

То же поведение и здесь, пока не добавятся некоторые координаты с использованием расширенных элементов управления.
Такое же поведение с одним из двух физических устройств. Первый с android 5 - работает нормально, другой с 6 - нет ответа до тех пор, пока не будет задействовано местоположение fakegps.

+1 здесь

У кого-нибудь есть идея, в чем причина? Эта функция все ломает, пробовал ли кто-нибудь другой плагин?

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

Кажется, что @ibrierley не может получить сигнал GPS с движением или без него, но в то же время разные приложения, такие как карты Google, не имеют проблем с определением текущего местоположения. lastKnownPosition возвращает местоположение примерно на пару сотен метров далеко. С Android 5 вообще нет проблем, даже если не запрашивается разрешение на местоположение (но не уверен, может быть, я пропустил это при отладке)

Те же проблемы на Android oreo, за исключением того, что вы закрываете и снова открываете приложение

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

Я не уверен, что именно заставило это работать, поскольку я пробовал много вещей, но, возможно, кто-то может проверить это и посмотреть, помогут ли они.

0) Убедитесь, что ваше устройство может получать сигнал GPS, чтобы выходить на улицу или передавать его через эмулятор (я загружаю его по маршруту GPX, который я скачал для тестирования).

1) Убедитесь, что экран включен. GPS может перестать возвращать результаты, если он находится в минимальном режиме, как бы он ни был вызван. Я принудительно включаю экран, когда это необходимо, с помощью пакета Screen и Screen.keepOn (true); Если экран выключен, кажется, что он удерживает и буферизует набор местоположений, пока экран снова не включится.

2) Это мои разрешения в AndroidManifest.xml, возможно, стоит попробовать

`` ''




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

3) У меня были странности с тайм-аутом Stream, поэтому я начал поток с geolocator.getPositionStream, но фактически не использовал его. Когда поток запущен, я вызываю getCurrentPosition (желаемоеAccuracy: LocationAccuracy.high) на основе таймера. Я думаю, что сейчас в этом нет необходимости, так как я думаю, что моей первоначальной проблемой было отключение экрана, но, возможно, стоит попробовать просто из интереса.

Если кто-то попробует описанное выше и не сможет заставить его работать, можете ли вы создать приложение с минимальным флаттером, только с указанием местоположения, и я посмотрю, не сработает ли оно на моем. Начать работать намного больнее, чем следовало бы: /.

Спасибо @ibrierley за информацию, постараюсь как можно скорее сообщить о своем опыте решения проблемы.

Сегодня провел небольшое исследование с дополнительными инструментами, такими как тест GPS на физических устройствах.
Таким образом, нет ответа, когда спутник недоступен при тестировании GPS (0 подключено 1 доступно из-за облаков и больших зданий вокруг), даже карта Google или другие картографические сервисы работают.
Нет ответа, когда спутник находится в сети, но определенное расстояние в параметрах местоположения, но не 100% в этом случае - нужен какой-то дрейф GPS, чтобы иметь начальные координаты.
Я проделал трюк с lastknownlocation для позиционирования там, чтобы запустить приложение, которое требует текущего местоположения до того, как будут доступны фактические данные о местоположении.
Вероятно, было бы отличным решением иметь какой-то флаг вроде isReady с возможным обратным вызовом в геолокаторе, который указывает, что служба GPS готова предлагать данные о местоположении через поток.

Кто-нибудь пробовал, например, это: https://github.com/Lyokone/flutterlocation или это: https://github.com/Lyokone/flutterlocation ? Таким образом, мы можем исключить ошибки, не связанные с этим пакетом.

Я пробовал это, и в итоге получилось вот это (это не значит, что это не так
хотя стоит попробовать!). У всех есть какие-то проблемы, я думаю, правда
потому что в Android есть неочевидные вещи.

Обычно я обнаруживал, что местоположение не возвращается ни на одном из
пакеты), это из-за проблемы с отсутствием флаттера (например, gps ушел в
спящий режим или отсутствие сигнала GPS).

Вт, 15 ноября 2018 г., в 19:26 HerrNiklasRaab [email protected]
написал:

Кто-нибудь пробовал, например, это:
https://github.com/Lyokone/flutterlocation или это:
https://github.com/Lyokone/flutterlocation ? Таким образом, мы можем исключить ошибки, которые
не относятся к этому пакету.

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439160446 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ADuG9WRbZuJYvi5N_2xrrku-Jurk6trIks5uvb_SgaJpZM4YKDSm
.

Кто-нибудь попробует мой?
flutter_background_geolocation

А с выключенным экраном из интереса работает?

В чт, 15 ноября 2018 г., в 20:16 Крис Скотт [email protected]
написал:

Кто-нибудь попробует мой?
flutter_background_geolocation
https://pub.dartlang.org/packages/flutter_background_geolocation#-readme-tab-

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439175841 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ADuG9f5uvZK0lDnYecMoFZhJnF0ylz6Pks5uvcuygaJpZM4YKDSm
.

Он работает, даже если вы завершите работу своего приложения ( stopOnTerminate: false ) или перезагрузите устройство ( startOnBoot: true ).

Я столкнулся с той же проблемой, которая никогда не возвращается из getCurrentPosition .
У меня такой код:
position = await Geolocator() .getCurrentPosition(desiredAccuracy: LocationAccuracy.best); setState(() { _position = position; }); if (position == null) Fluttertoast.showToast( msg: 'Position is null', toastLength: Toast.LENGTH_SHORT); else Fluttertoast.showToast( msg: 'Got Position', toastLength: Toast.LENGTH_SHORT);

Разрешения:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.hardware.location.gps" /> <uses-permission android:name="android.hardware.location.network" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> .
Когда я запускаю программу, индикатор местоположения появляется в верхней части экрана и остается неподвижным, пока я не закрою программу.
Любая помощь, пожалуйста?

То же самое, getCurrentPosition не работает с API 23.
Любая работа для этого или любого альтернативного пакета, работающего для получения текущей позиции?

Это немного сложно. Я мог бы заставить его работать сейчас, запустив сначала приложение Google Map и позволив ему запрашивать разрешение на включение GPS при касании моего местоположения. После этого getCurrentPosition внезапно сработало как шарм.

В моем случае я не могу получить местоположение с помощью какого-либо API. Не уверен, что это может решить ваши проблемы, но
Я попытался удалить здесь оператор NOT, добавил оператор return и он сработал. https://github.com/BaseflowIT/flutter-geolocator/blob/master/android/src/main/java/com/baseflow/flutter/plugin/geolocator/tasks/LocationUpdatesUsingLocationManagerTask.java#L52

// If we are listening to multiple location updates we can go ahead
// and report back the last known location (if we have one).
if(mStopAfterFirstLocationUpdate && mBestLocation != null) {
reportLocationUpdate(mBestLocation);
return;
}

Я просто наткнулся на это, так как мне нужно было действительно быстро исправить это после того, как я использовал другой плагин, который подвел меня в производстве. Я могу подтвердить, что я тестировал это на API 23 (физическое устройство), API 24 (физическое устройство) и API 28 (физическое устройство) и не имел с этим проблем. В API 23 меня спросили, хочу ли я помочь Google улучшить местоположение и т. Д., И я просто сказал, что да, он загрузил местоположение примерно через 20 секунд. В прошлом у меня были реальные проблемы с получением эмуляторов для возврата местоположений (собственная разработка для Android), так может ли это быть просто проблема с эмулятором?

У меня такая же проблема, и я установил тайм-аут для работы. Когда истекло время ожидания, я вызываю getLastKnownPosition ()

Geolocator().getCurrentPosition().timeout(Duration(seconds: 10)).then((position) {
      //getting position without problems
      print(position);
    }).catchError((error) {
      if (error is TimeoutException) {
        Geolocator().getLastKnownPosition().then((position) {
          //getting last known position
          print(position);
        }).catchError((error) {
          //handle the exception
        });
      } else {
        //handle the exception
      }
    });

Вы также можете сделать то же самое с потоком

@NMateu Спасибо за ваш вклад. Это было очень полезно!

У меня была такая же проблема с эмулятором, но .forceAndroidLocationManager = true; исправил ее для меня. Кажется, иногда мешает слитный менеджер местоположения.

есть новости по этому поводу?

Кому-нибудь удалось решить проблему? Мне действительно нужно это сделать, ребята!

Та же проблема, он хорошо работает на устройстве ios, но в наши дни не может получить местоположение на Android.

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

такая же проблема здесь

void _getUserLocation () async {
Geolocator geolocator = Geolocator () .. forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = ожидание geolocator.checkGeolocationPermissionStatus ();
Позиция position = await Geolocator ()
.getCurrentPosition (желаемая точность: LocationAccuracy.high);
Списокplacemark = await Geolocator ()
.placemarkFromCoordinates (position.latitude, position.longitude);
Распечатать("-----------------");
печать (метка [0]. позиция);
печать (geolocator.toString ());
печать (geolocationStatus.toString ());
setState (() {
_initialPosition = LatLng (позиция. широта, позиция, долгота);

  locationController.text = placemark[0].name;
});

}

он показывает неправильное место.

I / flutter (7363): широта: 37.421999899999996, долгота: -122.08405750000001
I / flutter (7363): Экземпляр 'Geolocator'
I / flutter (7363): GeolocationStatus.granted

void _getUserLocation () async {
Geolocator geolocator = Geolocator () .. forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = ожидание geolocator.checkGeolocationPermissionStatus ();
Позиция position = await Geolocator ()
.getCurrentPosition (желаемая точность: LocationAccuracy.high);
Список меток = await Geolocator ()
.placemarkFromCoordinates (position.latitude, position.longitude);
Распечатать("-----------------");
печать (метка [0]. позиция);
печать (geolocator.toString ());
печать (geolocationStatus.toString ());
setState (() {
_initialPosition = LatLng (позиция. широта, позиция, долгота);

  locationController.text = placemark[0].name;
});

}

Работает на эмуляторе с этим фрагментом
Geolocator()..forceAndroidLocationManager = true;

Этот пакет работал как шарм для всего

(https://github.com/alfanhui/new_geolocation)

Я столкнулся с той же проблемой с несколькими устройствами Android. Но я нашел для этого средство -

Все, что вам нужно сделать, это установить значение Geolocator () .. forceAndroidLocationManager = true.

final Geolocator geolocator = Geolocator () .. forceAndroidLocationManager = true;

Решено в версии 6.0.0

Position position = await Geolocator.getCurrentPosition (
желаемая точность: LocationAccuracy.low, forceAndroidLocationManager: true);
Это устранило мои проблемы

Я получаю сообщение об ошибке в строке forceAndroidLocationManager, в которой отображается красная линия, и ошибка заключается в том, что ... «Установщик forceAndroidLocationManager не определен для типа Geolocator.
Попробуйте импортировать библиотеку, которая определяет 'forceAndroidLocationManager', изменив имя на имя существующего установщика или определив установщик или поле с именем 'forceAndroidLocationManager'. "......... пожалуйста, может кто-нибудь мне помочь с этим

@ aditikumar-png какую версию геолокатора вы используете? Вы, наверное, недавно обновились до версии 6.x. В этой версии есть критическое изменение. Мы переместили свойство Geolocator().forceAndroidLocationManager в именованный параметр в методах getCurrentPosition и getPositionStream .

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

final position = await Geolocator.getCurrentPosition(forceAndroidLocationManager: true);

вместо старого:

final geolocator = Geolocator();
geolocator.forceAndroidLocationManager = true;

final position = await geolocator.getCurrentPosition();

@ aditikumar-png какую версию геолокатора вы используете? Вы, наверное, недавно обновились до версии 6.x. В этой версии есть критическое изменение. Мы переместили свойство Geolocator().forceAndroidLocationManager в именованный параметр в методах getCurrentPosition и getPositionStream .

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

final position = await Geolocator.getCurrentPosition(forceAndroidLocationManager: true);

вместо старого:

final geolocator = Geolocator();
geolocator.forceAndroidLocationManager = true;

final position = await geolocator.getCurrentPosition();

Большое спасибо!!!!! ты решил мою проблему за секунды, я боролся с этим с 9 часов

Была ли эта страница полезной?
0 / 5 - 0 рейтинги