Geolocation Android地理定位onError Phonegap

Geolocation Android地理定位onError Phonegap,geolocation,cordova,onerror,Geolocation,Cordova,Onerror,也许有人能解释一下 我正在使用Phonegap为Android构建一个移动应用程序,它使用地理定位和FourSquare的API。我想让应用程序离线运行,所以我在getCurrentPosition方法中使用onError方法。神秘的是,这只在某些时候起作用 我尝试了所有可能的方法,包括在设备的无线和/或GPS开/关的情况下进行测试,结果是一样的:有时会调用onError方法,而有时不会。。。该应用程序在线时工作正常 我已经包含了javascriptcode的基本部分,如果您检测到任何基本错误或

也许有人能解释一下

我正在使用Phonegap为Android构建一个移动应用程序,它使用地理定位和FourSquare的API。我想让应用程序离线运行,所以我在getCurrentPosition方法中使用onError方法。神秘的是,这只在某些时候起作用

我尝试了所有可能的方法,包括在设备的无线和/或GPS开/关的情况下进行测试,结果是一样的:有时会调用onError方法,而有时不会。。。该应用程序在线时工作正常

我已经包含了javascriptcode的基本部分,如果您检测到任何基本错误或有任何建议,请告诉我。我也可以上传剩下的。。。提前谢谢

// Wait for Cordova to load 
document.addEventListener("deviceready", onDeviceReady, false);


// Cordova is ready 
function onDeviceReady() {
   navigator.geolocation.getCurrentPosition(onSuccess, onError);
}


// onSuccess Geolocation 
function onSuccess(position) {


$('#buttonNo1').click(checkLocation);


}

function checkLocation() {

    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;

     var url2 = 'https://api.foursquare.com/v2/venues/search?ll='+latitude+','+ longitude + '&radius=10&oauth_token=FZGTD3IDTVJVJPFDARSSMZGVOTMK2ZOUPLHHYZKKN1JYJ11D&v=20130627&callback=?';

    $.get(url2, function(data) {

            venue0 =  data.response.venues[0].categories[0].name;
            venue1 =  data.response.venues[1].categories[0].name;
            venue2 =  data.response.venues[2].categories[0].name;
            populateHTML(venue0, venue1, venue2);

            }, "jsonp");

}


function onError(error) {

    populateHTMLManually();

}

你没有理由需要互联网连接来更新你的职位。即使设备上的GPS和Wifi都已关闭,也应该可以使用小区三角测量来确定大致位置

如果您希望Android设备使用GPS接收器(如果设备有),则在请求位置时必须使用EnableHighAccurance选项:

navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy: true});
关于脱机时出现的错误,可能是因为默认超时值在收到位置更新之前过期(请参阅)。请尝试同时增加超时和最大值:

navigator.geolocation.getCurrentPosition(onSuccess, onError, {
  enableHighAccuracy: true,
  timeout: 30000,
  maximumAge: 30000
});

虽然我不确定你的用户体验应该是怎样的,但是你可能想考虑使用GeCurrTrnPosits。这就设置了一个观察者,每当设备接收到一个位置更新时,都会调用On成功函数,从GPS接收器、WiFi或者通过小区三角测量。n连接互联网以更新您的位置。即使设备上的GPS和Wifi都已关闭,也应该可以使用小区三角测量来确定大致位置

如果您希望Android设备使用GPS接收器(如果设备有),则在请求位置时必须使用EnableHighAccurance选项:

navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy: true});
关于脱机时出现的错误,可能是因为默认超时值在收到位置更新之前过期(请参阅)。请尝试同时增加超时和最大值:

navigator.geolocation.getCurrentPosition(onSuccess, onError, {
  enableHighAccuracy: true,
  timeout: 30000,
  maximumAge: 30000
});

虽然我不确定你的用户体验应该是怎样的,但是你可能想考虑使用GeCurrTrnPosits。这就设置了一个观察者,每次接收到一个位置更新时,都会调用OnValm函数,从GPS接收器、WiFi或者通过小区三角测量。

< P>谢谢你的DPA9C和Mohit的SULU。因此,我决定朝着这个方向走:

我决定在ondevicerady()方法中包含一个检查internet连接的函数

这是最后的代码,它工作正常,但仍然需要尝试使用Dpa99c的想法来使用watchPosition…我使用了navigator.network.connection.type来确定是否存在Internet连接,并且到目前为止它似乎工作正常

// Wait for Cordova to load 
document.addEventListener("deviceready", onDeviceReady, false);


// Cordova is ready 
function onDeviceReady() {
     checkConnection();
    navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy: true,
    timeout: 30000,  maximumAge: 30000});

}


// onSuccess Geolocation 
function onSuccess(position) {


$('#buttonNo1').click(checkLocation);


}

function checkLocation() {

    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;

     var url2 = 'https://api.foursquare.com/v2/venues/search?ll='+latitude+','+ longitude + '&radius=10&oauth_token=FZGTD3IDTVJVJPFDARSSMZGVOTMK2ZOUPLHHYZKKN1JYJ11D&v=20130627&callback=?';

    $.get(url2, function(data) {

            venue0 =  data.response.venues[0].categories[0].name;
            venue1 =  data.response.venues[1].categories[0].name;
            venue2 =  data.response.venues[2].categories[0].name;
            populateHTML(venue0, venue1, venue2);

            }, "jsonp");

}


function onError(error) {

    populateHTMLManually();

}
function checkConnection() {

networkState = navigator.network.connection.type
if (networkState == Connection.NONE){
    $('#buttonNo1').click(function () {
    populateHTMLManually();
    });
}

}感谢Dpa99c和Mohit提供的解决方案,我决定朝着这个方向发展:

我决定在ondevicerady()方法中包含一个检查internet连接的函数

这是最后的代码,它工作正常,但仍然需要尝试使用Dpa99c的想法来使用watchPosition…我使用了navigator.network.connection.type来确定是否存在Internet连接,并且到目前为止它似乎工作正常

// Wait for Cordova to load 
document.addEventListener("deviceready", onDeviceReady, false);


// Cordova is ready 
function onDeviceReady() {
     checkConnection();
    navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy: true,
    timeout: 30000,  maximumAge: 30000});

}


// onSuccess Geolocation 
function onSuccess(position) {


$('#buttonNo1').click(checkLocation);


}

function checkLocation() {

    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;

     var url2 = 'https://api.foursquare.com/v2/venues/search?ll='+latitude+','+ longitude + '&radius=10&oauth_token=FZGTD3IDTVJVJPFDARSSMZGVOTMK2ZOUPLHHYZKKN1JYJ11D&v=20130627&callback=?';

    $.get(url2, function(data) {

            venue0 =  data.response.venues[0].categories[0].name;
            venue1 =  data.response.venues[1].categories[0].name;
            venue2 =  data.response.venues[2].categories[0].name;
            populateHTML(venue0, venue1, venue2);

            }, "jsonp");

}


function onError(error) {

    populateHTMLManually();

}
function checkConnection() {

networkState = navigator.network.connection.type
if (networkState == Connection.NONE){
    $('#buttonNo1').click(function () {
    populateHTMLManually();
    });
}
}