我正在使用Phonegap.Geolocation来获取用户的当前位置。
我在官方网站的文档中找到了this example。
然而,即使执行了onDevice ready,也不会执行成功或错误函数回调。我真的很困惑。
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova is ready
//
function onDeviceReady() {
alert('deviceready');
navigator.geolocation.getCurrentPosition(onSuccess, onError);
}
// onSuccess Geolocation
//
function onSuccess(position) {
var element = document.getElementById('geolocation');
element.innerHTML = 'Latitude: ' + position.coords.latitude + '<br />' +
'Longitude: ' + position.coords.longitude + '<br />' +
'Altitude: ' + position.coords.altitude + '<br />' +
'Accuracy: ' + position.coords.accuracy + '<br />' +
'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '<br />' +
'Heading: ' + position.coords.heading + '<br />' +
'Speed: ' + position.coords.speed + '<br />' +
'Timestamp: ' + position.timestamp + '<br />';
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
答案 0 :(得分:17)
确保您安装了地理位置插件(运行phonegap local plugin add org.apache.cordova.geolocation
),并在设备中启用了GPS。
添加超时并设置enableHighAccuracy:
navigator.geolocation.getCurrentPosition(onSuccess, onError, {timeout: 10000, enableHighAccuracy: true});
在某些模拟器中,您需要将enableHighAccuracy设置为false,因此如果仍然无效,请尝试使用。
如果您使用的是Android模拟器,它不会读取GPS值,因此我们需要通过命令行发送它们。我们需要在运行模拟器的端口中启动一个telnet会话(您可以检查模拟器窗口标题中的端口,开头的数字,在我的情况下为5554):
telnet localhost 5554
然后运行命令
geo fix -122.4 37.78
如果您关闭应用程序,则需要重新发送地理位置,因此如果它不起作用,只需在打开应用程序之后立即运行geo fix
命令,然后才会触发超时事件。
答案 1 :(得分:5)
实际上它正在运作,但是位置无法在短时间内确定,因此既不会被视为成功也不会失败,因此不会执行任何操作。
这可以通过设置GeoLocation回调的超时来管理
答案 2 :(得分:5)
如果手机功能无法正常工作,请检查是否设置了相应的应用权限。例如,对于互联网访问或Android设备上的地理位置,您的AndroidManifest.xml必须包含以下行:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
答案 3 :(得分:1)
确定。我也很难解决这个问题[这就是我如何到达这个页面]
但它终于奏效了。我刚做了改变:
我改变了这一行:navigator.geolocation.getCurrentPosition(onSuccess,onError);
指向:navigator.geolocation.getCurrentPosition(onSuccess);
现在整个事情都有效。
答案 4 :(得分:0)
问题出在浏览器上。 清除浏览器缓存并再次运行。
答案 5 :(得分:0)
确保您已将javascript包含在正文中而不是html的head部分中。在通过互联网找不到任何线索后,我学到了很难,所以认为最好分享。它对我来说很有魅力,我将javascript代码从
转移到了答案 6 :(得分:0)
如果您使用的是PhoneGap Desktop,并且无法直接访问AndroidManifest.xml,则解决方案是通过在config.xml中添加“ config-file”元素来添加权限配置。
在项目的config.xml中,添加以下行:
<config-file platform="android" parent="/manifest" mode="merge">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</config-file>
此外,请确保在config.xml的小部件元素中声明android xml命名空间:
<widget id="com.phonegap.helloworld" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
此处有更多详细信息:http://docs.phonegap.com/phonegap-build/configuring/config-file-element/