我正在构建一个依赖地理定位的小应用程序。我使用以下代码从设备获取当前位置:
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" />
结果与我在模拟器中或直接在手机上运行的天气相同。如果有人知道如何解决这个问题,将非常感谢提示。
答案 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 };