离子地理定位总是陷入错误方法

Posted

技术标签:

【中文标题】离子地理定位总是陷入错误方法【英文标题】:Ionic Geolocation always falls into error method 【发布时间】:2020-05-29 18:38:59 【问题描述】:

我一直未能达到我想要的结果。我想要的只是获取地理位置坐标,如果设备位置已关闭,则会显示提示以在不离开应用程序的情况下启用该位置,并且设备位置已打开,我已手动验证。

但问题是我每次尝试都会陷入错误方法

import  LocationAccuracy  from '@ionic-native/location-accuracy/ngx';
import  Plugins  from '@capacitor/core';
const  Geolocation  = Plugins;

this.locationAccuracy.request(this.locationAccuracy.REQUEST_PRIORITY_HIGH_ACCURACY).
then(() => 

      Geolocation.getCurrentPosition( enableHighAccuracy: true ).then(loc => 

        alert('Position detected successfully' + loc);

      ).catch(error => 

        alert(error);

      );

    ).catch(deny => 

      alert('You denied the location');

    );

但是有一点很奇怪,那就是在启动应用程序之前,如果我运行谷歌地图并定位自己,那么我的应用程序可以正常运行,否则会一直陷入错误方法。

【问题讨论】:

【参考方案1】:

我认为您不需要 cordova-plugin-request-location-accuracy。以下是使用 Capacitor 获取当前位置的方法:

页面类(更新了错误处理):

import  Component  from '@angular/core';

import  GeolocationPosition, Plugins  from '@capacitor/core';
const  Geolocation  = Plugins;

@Component(
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
)
export class HomePage 
  currentPos: GeolocationPosition;
  waitingForCurrentPosition = false;

  constructor() 
  

  async getCurrentPos() 
    try 
      this.waitingForCurrentPosition = true;
      this.currentPos = await Geolocation.getCurrentPosition();
      console.log(this.currentPos);
     catch (err) 
      console.error('Failed to get current position.', err);
     finally 
      this.waitingForCurrentPosition = false;
    
  


页面模板:

<ion-header>
  <ion-toolbar>
    <ion-title>
      Capacitor Geolocation
    </ion-title>
  </ion-toolbar>
</ion-header>

<ion-content>
  <ion-button (click)="getCurrentPos()" expand="block">
    <ion-spinner *ngIf="waitingForCurrentPosition"></ion-spinner>
    Get Current position
  </ion-button>

  <ul *ngIf="currentPos">
    <li>timestamp:  currentPos.timestamp </li>
    <li>coords:
      <ul>
        <li>latitude:  currentPos.coords.latitude </li>
        <li>longitude:  currentPos.coords.longitude </li>
        <li>accuracy:  currentPos.coords.accuracy </li>
        <li>altitudeAccuracy:  currentPos.coords.altitudeAccuracy </li>
        <li>altitude:  currentPos.coords.altitude </li>
        <li>speed:  currentPos.coords.speed </li>
        <li>heading:  currentPos.coords.heading </li>
      </ul>
    </li>
  </ul>
</ion-content>

当您尝试获得职位(点击按钮)时,该应用将请求权限。

这适用于 2 台测试设备:

一加 6 (android 10) BlackView A60 (Android Go)

我之前在 iPhone 6S 上测试过,所以它应该也适用于 ios

我创建了一个basic demo in this repo。

【讨论】:

问题是它只有在打开应用程序之前打开设备 GPS 时才有效,如果我在设备期间打开 GPS 它将不起作用。 PS cordova-plugin-request-location-accuracy. 的准确性只是提示用户在 GPS 已关闭的情况下启用它。如果 GPS 已打开,则不会弹出提示 我明白了。我明白了cordova-plugin-request-location-accuracy 的意思,我不知道只有在电容器中才能替代它(我会很感兴趣,因为那个 Cordova 包很重)。但是在我的 Android 手机上,如果我关闭位置,然后打开应用程序,然后打开位置,然后请求当前位置,它就可以工作。 为什么它在我的情况下不起作用?只是你的想法 我不知道 :( 我可以在几分钟内发布一个指向我的测试项目的链接。

以上是关于离子地理定位总是陷入错误方法的主要内容,如果未能解决你的问题,请参考以下文章

离子应用程序的地理定位错误在浏览器上有效,但在安卓手机上无效

离子地理定位 - 如何更新位置?

具有离子框架的 ngCordova 地理定位

背景地理定位离子3不更新

离子地理定位,iOS 上没有权限

原生离子地理定位有时不起作用