Ionic Native Geolocation не работает на Android

У меня есть следующий код, использующий Ionic Native Geolocation:

import { Geolocation } from 'ionic-native';

    this.platform.ready().then(() => {
        alert('loadMap about to getCurrentPosition');
          Geolocation.getCurrentPosition(options).then((position) => {
        alert('loadMap getCurrentPosition');
            let latLng: google.maps.LatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
            bound.extend(latLng);
            this.load(bound);
          });
    });

Когда я запускаю это как ionic serve в браузере или создаю его и запускаю на iOS Simulator (Xcode), это работает. Однако, когда я создаю это для Android и пытаюсь запустить его, срабатывает первое предупреждение, но не второе.

Это означает, что только для Android Geolocation.getCurrentPosition... не работает.

У меня есть другая страница, которая может отображать карту через this.map = new google.maps.Map(htmlElement, mapOptions);, поэтому похоже, что проблема связана с получением текущей позиции. Однако, когда я устанавливаю приложение, я получаю это сообщение:

Allow AppName to access the device's location?
DENY    ALLOW

На что я нажимаю Allow.

Кто-нибудь знает, что я делаю неправильно, или есть ли какие-то недостающие шаги в процессе установки и сборки Android?

Спасибо


person Richard    schedule 09.03.2017    source источник
comment
Я использовал это некоторое время, и это сработало. Теперь внезапно это больше не работает. Никаких изменений кода. Я думаю, что ваш код в порядке, но я думаю, что кто-то еще нестабилен. ООООООООчень неприятно. Нет тайм-аута ничего   -  person Harry    schedule 25.04.2017
comment
@ Гарри, сэр, я тоже расстроен последние 3 дня, в моем случае функция не срабатывает?   -  person Kapil soni    schedule 29.04.2019


Ответы (4)


Хорошо, поэтому я боролся с этим некоторое время. Иногда это работает, иногда нет. Попробуйте добавить к нему опции:

let options = {timeout: 10000, enableHighAccuracy: true, maximumAge: 3600};
Geolocation.getCurrentPosition(options).then((resp) => {
person Harry    schedule 25.04.2017
comment
Сэр, я пробовал приведенный выше код, но у меня не работает. Функция getCurrentPosition не срабатывает, она работает только после запуска Android, но после создания сборки она не работает, скажите мне, сэр, в чем проблема? - person Kapil soni; 29.04.2019

Следующие шаги помогли мне:

Установите два последних плагина ionic-cli:

sudo npm install -g ionic@latest
npm install --save-dev --save-exact @ionic/cli-plugin-cordova@latest
npm install --save-dev --save-exact @ionic/cli-plugin-ionic-angular@latest

Затем установите плагин геолокации:

npm install @ionic-native/geolocation --save
ionic cordova plugin add cordova-plugin-geolocation

Затем удалите папку '/node_modules' и очистите кеш npm:

rm -rf node_modules/
npm cache clean --force

И, наконец, переустановите пакеты:

npm install

Надеюсь, это поможет кому-то :)

person Nicolas    schedule 14.06.2017

let options = {timeout: 10000, enableHighAccuracy: true, maximumAge: 3600};

кажется, это запускает геолокацию, но не может поймать lat и lng return {}

person Hayatullah Rahnamoon    schedule 28.12.2017

Попробуйте фоновую геолокацию вместо геолокации, это решило мою проблему. Подробнее читайте в документе https://ionicframework.com/docs/native/background-geolocation/

person Vibhor Sharma    schedule 10.05.2018
comment
Предоставьте дополнительную информацию, добавьте код и, возможно, ссылку на документы. - person Armin Šupuk; 10.05.2018