我正在构建一个依赖地理位置的小型应用程序。我使用以下代码从设备获取当前位置:
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" />
结果与我在模拟器中或直接在手机上运行它的天气相同。如果有人知道如何解决这个问题,我们将不胜感激。
这是因为返回的错误对象是一个特殊的对象。使用
$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 对象。
尝试下面的代码来检查错误它可能与不安全的来源有关,这意味着它不适用于私有IP
https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features/
使用以下代码var options = { enableHighAccuracy: true, timeout:5000, maximumAge: 0 };