реагировать родной navigator.geolocation.getCurrentPosition не работает

Я использую настоящее устройство Android (версия 5.1)

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

Я использую большой тайм-аут, переключая enableHighAccuracy на true и false, удаляя параметры... и т.д. всем не удалось получить данные navigator.geolocation.

Вот мой код:

var options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

function success(pos) {
  var crd = pos.coords;

  console.log('Your current position is:');
  console.log(`Latitude : ${crd.latitude}`);
  console.log(`Longitude: ${crd.longitude}`);
  console.log(`More or less ${crd.accuracy} meters.`);
};

function error(err) {
  console.warn(`ERROR(${err.code}): ${err.message}`);
};

navigator.geolocation.getCurrentPosition(success, error, options);

Я получаю: ERROR(3): Location request timed out


person Badis Merabet    schedule 16.11.2017    source источник


Ответы (5)


Две вещи.

1) На самом деле это не большой тайм-аут для ответа с высокой точностью, если координаты не кэшируются 2) На некоторых устройствах возникают проблемы с настройкой highAccuracy.

Попробуйте поставить 30000 мс в качестве тайм-аута и убрать высокую точность, пока не найдете одну настройку, которая работает.

Изменить: я нашел длинную ошибку, которую помнил, из React Native: https://github.com/facebook/react-native/issues/7495

Итак, попробуйте следующее:

1) Удалите свойство maxAge 2) Если это не сработает, удалите третий параметр и используйте значения по умолчанию из собственного модуля. Это означает, что не отправляйте объект параметров. Это должно сработать.

person sfratini    schedule 17.11.2017
comment
Спасибо за ваш ответ. Я просто вставил код отсюда: developer.mozilla.org/fr/ документы/Веб/API/Геолокация/ . но я использую другие настройки `{enableHighAccuracy: false, timeout: 50000, maxAge: 0}` и потерпел неудачу. - person Badis Merabet; 17.11.2017
comment
Я получаю следующий результат: imgur.com/a/JL40m. через несколько секунд после открытия страницы. Но я не могу получить какие-либо данные программно. - person Badis Merabet; 17.11.2017
comment
Я не считаю, что это высокая точность, так как диаметр слишком велик. У вас включен GPS в телефоне? Дали ли вы приложению доступ к разрешениям на точное определение местоположения? (в манифесте и на странице безопасности приложения) - person sfratini; 17.11.2017
comment
Я переключил enableHighAccuracy на false и true. и да, я добавил: ‹uses-permission android:name=android.permission.ACCESS_FINE_LOCATION /› в файл AndroidManifest.xml, и я все еще получаю ту же ошибку. Я готов поделиться кодом, если вы заинтересованы. - person Badis Merabet; 17.11.2017
comment
Также я использовал: значения 5000, 50000 и 500000 для тайм-аута. и я все еще получаю ту же ошибку. Если я включу GPS на своем телефоне, синяя точка моего положения отобразится через 2 секунды с точным моим положением. и диаметром около 200 метров - person Badis Merabet; 17.11.2017
comment
Удалите настройку maxAge и повторите попытку. Не 0, просто удалите его. - person sfratini; 17.11.2017
comment
Смотрите мой отредактированный ответ. Я вспомнил, что за ошибка. - person sfratini; 17.11.2017
comment
Я попытался удалить maxAge и параметры вместе, и я получаю ту же ошибку: ERROR (3): тайм-аут запроса местоположения. Я был последним, кто прокомментировал эту проблему с github. Я поделился ссылкой на свой код на github. было бы здорово, если бы вы взглянули на него! Большое спасибо ! - person Badis Merabet; 18.11.2017
comment
Я обнаружил, что столкнулся именно с этой проблемой. (stackoverflow.com/questions/ 35126349/). не удалось получитьCurrentPosition. watchPosition работает! Я до сих пор не знаю, почему. - person Badis Merabet; 20.11.2017
comment
Для меня добавление ‹uses-permission android:name=android.permission.ACCESS_FINE_LOCATION/› в файл манифеста Android устранило проблему. - person Shoeb Mirza; 19.10.2018

Я знаю, что уже слишком поздно, но это может помочь кому-то другому.

Геолокация была извлечена из версии React Native .60. Если вам нужно альтернативное решение

Установите react-native-community/geolocation :

npm install @react-native-community/geolocation --save

react-native link @react-native-community/geolocation

Затем, чтобы запросить доступ к местоположению, вам нужно добавить следующую строку в файл AndroidManifest.xml вашего приложения.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Использование :

import Geolocation from '@react-native-community/geolocation';

Geolocation.getCurrentPosition(info => console.log(info));
person Sandip Singh    schedule 01.11.2019
comment
что насчет {enableHighAccuracy: true, timeout: 20000, maximumAge: 10000} ? - person Oliver D; 27.11.2019
comment
это странно, я не знаю, где лучшее объяснение, почему мы не можем получить правильные координаты, используя эту текущую позицию геолокации - person DevGe; 26.12.2020

Удаление maxAge решило проблему здесь! На всякий случай, если у кого-то все еще есть эта проблема в 2019 году или позже.

person Marlon Englemam    schedule 09.06.2019

Чтобы запросить доступ к местоположению, вам нужно добавить следующую строку в файл AndroidManifest.xml вашего приложения: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />.

Для Android с API >= 23 вам необходимо выполнить дополнительный шаг для проверки: вам нужно запросить разрешение ACCESS_FINE_LOCATION с помощью PermissionsAndroid API.

PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      {
        title: "Location Accessing Permission",
        message: "App needs access to your location"
      }
    );

И только после этого запустить navigator.geolocation.getCurrentPosition(success, error, options);

person David    schedule 08.02.2019

Я использовал это, и оно отлично работает: {enableHighAccuracy: false, timeout: 50000}

async watchPosition() {
    console.log('watchPosition');        
    await navigator.geolocation.getCurrentPosition(
        (position) => {
          console.log('Position -> ',position);
        },
        (error) => console.log(error)
        {enableHighAccuracy: false, timeout: 50000}
    );
}
person Johnmark Hugo    schedule 13.10.2018