Ionic - navigator.geolocation返回空的错误对象

时间:2016-07-25 16:30:58

标签: javascript android cordova ionic-framework

我正在构建一个依赖地理定位的小应用程序。我使用以下代码从设备获取当前位置:

var options = { maximumAge: 3000, timeout: 300000, enableHighAccuracy: true };
navigator.geolocation.watchPosition(function(result) {
  console.info(result);
}, function(error) {
  console.error(JSON.stringify(error));
}, options);

但是,始终使用空错误对象调用错误回调

1     123317   error    {}

没有代码也没有消息,只是一个空对象。同样有趣的是错误回调被称为立即,无论我设置为超时。

我的AndroidManifest.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" />

结果与我在模拟器中或直接在手机上运行的天气相同。如果有人知道如何解决这个问题,将非常感谢提示。

2 个答案:

答案 0 :(得分:2)

这是因为返回的错误对象是一个特殊对象。使用JSON.stringify不会考虑继承的属性。如果您使用的是Chrome或Safari,则尤其如此。

$cordovaGeolocation
.getCurrentPosition()
.then((resp)=>{
  $scope.lat = resp.coords.latitude;
  $scope.lon = resp.coords.longitude;
}).catch((error)=> {
  $scope.errm = error.message;
  $scope.errc = error.code;
  console.log(error.code+" "+error.message)
});

您可以使用此代码查看错误代码和消息。如果要查看完整对象,可以使用SO Answer来执行此操作。

在错误方面,有几个例如需要安全起源或可能限制相同的wifi连接。

PS:这也适用于Geolocation对象。

答案 1 :(得分:0)

使用以下代码

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