簡體   English   中英

Ionic 2地理位置無法在Android設備上運行

[英]Ionic 2 geolocation not working on Android device

我正在嘗試獲取Ionic 2中的當前地理位置,以在Android設備上工作。 在瀏覽器中它運行良好,但是當我運行ionic cordova run android命令以將其部署在設備上時,地理位置根本不會執行,並且出現以下錯誤:

Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode. main.js:48746 

Native: deviceready did not fire within 2000ms. This can happen when plugins are in an inconsistent state. Try removing plugins from plugins/ and reinstalling them. cordova.js:1223 (anonymous) @ main.js:48746

deviceready has not fired after 5 seconds. main.js:48741 

DEVICE READY FIRED AFTER 3656 ms main.js:119892 

Ionic Native: deviceready event fired after 3519 ms main.js:122839 

Ionic Storage driver: asyncStorage main.js:50230 

navigator.geolocation works well main.js:8291 

PlacesPage ionViewDidLoad error: this.getGeolocation is not a function

主要是,我不明白的是我得到了this.getGeolocation is not a function因為它在瀏覽器和設備之間是如何變化的?

import { Geolocation } from '@ionic-native/geolocation';
...
constructor(private geolocation: Geolocation) {}
...
ionViewDidLoad() {
    if(this.platform.is('cordova') === true){
        document.addEventListener("deviceready", onDeviceReady, false);
    }else{
        console.log('Browser geolocation')
        this.getGeolocation();
    }

    function onDeviceReady() {
        console.log("navigator.geolocation works well");
        this.getGeolocation();
    }
}

getGeolocation(){
    console.log('Starting Geolocation');

    var options = {
        enableHighAccuracy: true
    };

    this.geolocation.getCurrentPosition(options)
    .then((position) => {
        console.log('Geolocation successful');

        this.currentLocation = {
            lat: position.coords.latitude,
            lng: position.coords.longitude
        };

        let query = '?lat=' + position.coords.latitude + '&lng=' + position.coords.longitude;

        this.updatePlaces(query);

    }).catch((error) => {
        console.log('Error getting location', error);
    });
}

我嘗試刪除所有插件並重新安裝。 我已經將Content-Security-Policy添加到index.html。

誰能告訴我哪里出了問題或指導我正確的方向? 謝謝。

您的代碼對我來說似乎不正確。 將代碼更改為以下代碼:

import { Geolocation } from '@ionic-native/geolocation';
...
constructor(private geolocation: Geolocation) {}
...
ionViewDidLoad() {
    if(this.platform.is('cordova') === true){
        document.addEventListener("deviceready", onDeviceReady, false);
    }else{
        console.log('Browser geolocation')
        this.getGeolocation();
    }
}

function onDeviceReady() {
        console.log("navigator.geolocation works well");
        this.getGeolocation();
    }

getGeolocation(){
    console.log('Starting Geolocation');

    var options = {
        enableHighAccuracy: true
    };

    this.geolocation.getCurrentPosition(options)
    .then((position) => {
        console.log('Geolocation successful');

        this.currentLocation = {
            lat: position.coords.latitude,
            lng: position.coords.longitude
        };

        let query = '?lat=' + position.coords.latitude + '&lng=' + position.coords.longitude;

        this.updatePlaces(query);

    }).catch((error) => {
        console.log('Error getting location', error);
    });
}

我似乎已經解決了這個問題。 問題是我一直在混合Cordova地理位置的實現和Ionic的實現。 在Ionic中,不需要像docs中所示添加事件偵聽器(我想它可以在后台處理),因此正確的實現應如下所示:

import { Geolocation } from '@ionic-native/geolocation';
...
constructor(private geolocation: Geolocation) {}
...
ionViewDidLoad() {
    this.getGeolocation();
}

getGeolocation(){
    console.log('Starting Geolocation');

    var options = {
        enableHighAccuracy: true
    };

    this.geolocation.getCurrentPosition(options)
    .then((position) => {
        console.log('Geolocation successful');

        this.currentLocation = {
            lat: position.coords.latitude,
            lng: position.coords.longitude
        };

        let query = '?lat=' + position.coords.latitude + '&lng=' + position.coords.longitude;

        this.updatePlaces(query);

    }).catch((error) => {
        console.log('Error getting location', error);
    });
}

在實現事件偵聽器之前,我已經有了這段代碼,但是當時插件出現了故障,因此嘗試對其進行修復,從而實現了事件偵聽器。 感謝@Prera​​k Tiwari使我思考正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM