使用phonegap的android地理定位代码:3错误
我正在尝试使用PhoneGap API文档使用地理定位,但收到下面的错误消息 警觉的 代码:3 消息:超时已过期 我的密码是使用phonegap的android地理定位代码:3错误,android,cordova,Android,Cordova,我正在尝试使用PhoneGap API文档使用地理定位,但收到下面的错误消息 警觉的 代码:3 消息:超时已过期 我的密码是 <script> // Wait for Cordova to load // document.addEventListener("deviceready", onDeviceReady, false); var watchID = null; // Cordova is ready // function onDeviceReady() {
<script>
// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);
var watchID = null;
// Cordova is ready
//
function onDeviceReady() {
// Throw an error if no update is received every 30 seconds
var options = { timeout: 10000 };
watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
}
// onSuccess Geolocation
//
function onSuccess(position) {
var element = document.getElementById('geolocation');
element.innerHTML = 'Latitude: ' + position.coords.latitude + '<br />' +
'Longitude: ' + position.coords.longitude + '<br />' +
'<hr />' + element.innerHTML;
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
//等待Cordova加载
//
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
var-watchID=null;
//科尔多瓦准备好了
//
函数ondevicerady(){
//如果每30秒未收到更新,则引发错误
var选项={timeout:10000};
watchID=navigator.geolocation.watchPosition(onSuccess、onError、options);
}
//成功地理定位
//
成功时的功能(位置){
var element=document.getElementById('geolocation');
element.innerHTML='Latitude:'+position.coords.Latitude+'
'+
'经度:'+position.coords.Longitude+'
'+
“
”+element.innerHTML;
}
//OneError回调接收PositionError对象
//
函数onError(错误){
警报('code:'+error.code+'\n'+
'消息:'+error.message+'\n');
}
请告诉我缺少什么。Phonegap使用与地理定位API相同的接口,您也可以在没有Phonegap库的常规web应用程序中使用该接口 发件人: 超时(数值3)
在实现成功获取新位置对象之前,超时属性指定的时间长度已过
因此,您可以尝试提供更高的超时值作为参数。如果您的唯一提供商是GPS,那么10秒是非常短的时间。在这种情况下,即使在户外也可能需要40到60秒的时间进行修复。我认为这是一个相对常见的问题,尤其是Android设备。我遇到的一些流行解决方案包括
我希望这能有所帮助。假设您在Android仿真器中遇到此问题:
navigator.geolocation.getCurrentPosition(onSuccess, onError, {timeout: 10000, enableHighAccuracy: true});
在某些模拟器中,您需要将EnableHighAccurance设置为false,所以如果仍然不起作用,请尝试 geo fix -122.4 37.78
如果关闭应用程序,则需要重新发送地理位置信息,因此,如果该信息不起作用,只需在打开应用程序之后,在触发超时事件之前运行geo-fix
命令即可
如果您使用的是真正的Android设备,请确保它已启用GPS,并且已安装地理定位插件(运行
phonegap local plugin add org.apache.cordova.geolocation
)此错误的另一个原因(我的情况下)是手动安装apk,而不授予应用程序相关权限。例如:
网络通信:查看Wi-Fi状态,创建蓝牙连接,
完全访问Internet,查看网络状态
您的位置:访问额外的位置提供程序命令,很好(GPS)
位置,模拟位置源,用于测试,粗略(基于网络)
位置
+关于权限的信息:我解决了运行最新Android(物理设备)的HTC M8的这个问题,没有指定最大值和超时
navigator.geolocation.getCurrentPosition(onSuccess, onError, {
// maximumAge: 100,
// timeout: 2000,
enableHighAccuracy: true
});
在iPhone5上,它工作正常,但Android只返回错误。现在两者都可以顺利工作了。我会注意到,我甚至尝试了1小时最大值和高超时,但都没有成功。这是唯一适用于所有场景的解决方案。我用ngCordova尝试了cordova插件地理定位,但它总是返回超时错误,这意味着它无法在我设置的5分钟超时中获取设备的位置,因此Android 5.1的最终解决方案至少是: 我已将权限添加到
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NETWORK_ACCESS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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" />
没有访问WIFI\u状态
许可,它无法工作
现在它甚至可以在没有sim卡的情况下工作,连接了wifi并启用了位置
以防有人会觉得它很有用。我已经将超时时间增加到30000,但仍然没有luckAre您在启用GPS的手机上进行测试?试着用90秒去户外。你应该能够得到一个修复去户外和设置超时100000仍然不起作用,继续得到超时消息。有什么帮助吗?iOS模拟器上的高精度错误修复了这个问题!谢谢,我在爱奥尼亚3上使用带有爱奥尼亚原生版的cordova地理定位插件。它不工作,如果我使用超时值,我会收到一个超时错误。如果没有超时值,我永远不会有响应。Android平板电脑上已启用GPS,状态栏上的GPS图标将出现。我从来没有回应过coords
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NETWORK_ACCESS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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" />