【问题标题】:Native ionic 2 geolocation is not working on android device本机 ionic 2 地理定位在 android 设备上不起作用
【发布时间】:2016-06-22 03:52:11
【问题描述】:

我使用的是原生 Ionic 2 Geolocation 插件,但它没有按预期工作。首先,我添加插件。

ionic plugin add cordova-plugin-geolocation

然后我导入插件并发出调用以获取当前位置。

import { Geolocation } from 'ionic-native';
import { Geoposition, GeolocationOptions } from 'ionic-native/dist/plugins/geolocation';

export class MyComponent {
 protected getLocation():Promise<Geoposition> {
  let options:GeolocationOptions = {
   maximumAge: 0, timeout: 5000, enableHighAccuracy: false
  };
  return Geolocation.getCurrentPosition(options)
   .catch(error => { console.error(error.message) };
 }
}

我还检查了我的 AndroidManifest.xml。

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

我注意到总是超过超时。如果我将其保留为默认值(默认情况下超时设置为无穷大),那么大约 20 分钟后,我确实得到了一个地理位置。当然,20 分钟并不理想。

我也尝试使用navigator,如下所示。但我得到了完全相同的结果。

navigator.geolocation.getCurrentPosition(
 position => {
  console.info('using navigator');
  console.info(position.coords.latitude);
  console.info(position.coords.longitude);
 },
 error => {
  console.warn('using navigator');
  console.warn(error.code);
  console.warn(error.message);
 },
 options
);

Chrome 上测试时,代码按预期工作;唯一的区别是我收到一个弹出窗口,询问我是否要允许该页面访问我的位置。

我看到很多人在使用 Ionic 的 SO 上也有同样的问题,但这是版本 1。我想在 Ionic 2 的背景下问这个问题。

顺便说一句,我也更新了 Cordova,版本显示为 6.0.2。

npm update -g cordova

版本信息

  • 离子 2.0.0-beta.30
  • 科尔多瓦 6.0.2
  • Gulp CLI 1.2.1 和本地 3.9.1

【问题讨论】:

  • 面临同样的问题。你找到解决办法了吗?
  • 不,我还没有找到解决方案。前几天我看了 ionic 2,有一个新的地理定位插件,我要试试。我稍后会发布链接并尝试看看它是否有帮助。

标签: android cordova angular cordova-plugins ionic2


【解决方案1】:

使用此代码:

if (navigator.geolocation) {
      var options = {
        enableHighAccuracy: true
      };

      navigator.geolocation.getCurrentPosition(position=> {
        console.info('using navigator');
        console.info(position.coords.latitude);
        console.info(position.coords.longitude);
      }, error => {
        console.log(error);
      }, options);
    }

记得导入Geolocation:

import { Geolocation } from 'ionic-native';

并添加插件:

ionic plugin add cordova-plugin-geolocation

【讨论】:

  • 这很好用。在带有承诺的较新版本上,您将执行 geolocation.getCurrentPosition(options).then((position) => { //some logic here });
  • 如果位置关闭然后打开它,我怎样才能让这个功能运行。我的意思是如果位置关闭地理定位将返回错误,所以如果稍后我在同一页面上打开它,地理定位将不会再次运行,所以我怎样才能让它像位置状态的侦听器一样再次运行。跨度>
【解决方案2】:

可能我找到了解决方案。问题出在我的 GPS 模块上。最终它停止在任何站点找到我的位置。我重新加载了手机,现在一切正常。

因此,首先检查您是否可以在 maps.google.com 等网站上确定您的位置。如果无法确定您的位置,则问题出在您的手机上。尝试重新加载或重新刷新它。

【讨论】:

    【解决方案3】:

    安装两个cordova依赖项

    cordova plugin add cordova-plugin-geolocation
    cordova plugin add cordova-plugin-whitelist
    

    将此权限添加到 AndroidMainfest.xml

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

    请记住,当运行 ionic cordova run android -l geolocation 会抛出这个不安全的错误。 在你的浏览器上测试它或用

    做一个简单的运行
    ionic cordova run android
    

    它为我解决了问题,希望对其他人有所帮助。

    【讨论】:

      【解决方案4】:

      这通常是因为你只添加了离子插件而忘记添加cordova插件(不知道为什么它没有被离子插件添加命令安装):

      ionic plugin add cordova-plugin-geolocation
      

      然后:

      cordova plugin add cordova-plugin-geolocation
      

      安装cordova插件可以修复某些情况下的错误。

      在使用 ionic serve 的浏览器上运行应用程序时也会发生这种情况,因为 Cordova 插件不可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        • 2018-01-29
        • 2019-07-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-12
        • 1970-01-01
        相关资源
        最近更新 更多