Когда я запускаю Geolocator (). GetCurrentPosition () в эмуляторе Android с Android Pie (API 28), вызов вообще не возвращается.
Я запускаю тот же код на API 27, местоположение возвращается нормально. Пробовал создать новый эмулятор, ничего не меняется.
Эмулятор Android с Android Pie (API 28)
Версия: 2.1.0
Платформа:
я тоже, что не так? :(
То же самое!
@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);
Список
.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 часов
Самый полезный комментарий
У меня такая же проблема, и я установил тайм-аут для работы. Когда истекло время ожидания, я вызываю getLastKnownPosition ()
Вы также можете сделать то же самое с потоком