在cordova app中无法检测到没有互联网连接

时间:2016-03-11 21:31:30

标签: javascript android cordova

我一直在搜索如何检查我的cordova应用程序的互联网连接(目前针对Android)。我尝试过以下方法:

 $.ajax("rss file url", {
            contentType: "application/json; charset=utf-8",
            dataType: 'jsonp',
            crossDomain: true
        })
               .done(function (data, textStatus, jqXHR) {
                //get rss
               })
               .fail(function (jqXHR, textStatus, errorThrown) {
                  //no internet alert
               })
               .always(function () {
                   //alert("complete");
               });

我也试过

function doesConnectionExist() {

    var xhr = new XMLHttpRequest();
    var file = "file url";
    var randomNum = Math.round(Math.random() * 10000);

    xhr.open('HEAD', file + "?rand=" + randomNum, false);

    try {
        xhr.send();

        if (xhr.status >= 200 && xhr.status < 304) {
            return true;
        } else {
            return false;
        }
    } catch (e) {
       return false;
    }
}

问题是这些在visual studio的涟漪仿真器中工作得非常好,但是当我在Android设备上调试时,我总是得不到任何连接结果。尽管如此,该设备已连接到Wi-Fi。 如果我删除此检查,我的应用程序工作正常。但是,我需要检查互联网连接,因为我的应用程序基本上是一个rss提要阅读器。任何帮助将不胜感激。

我已经尝试了提到的解决方案here我已经发布了$ .ajax代码。问题是该解决方案在纹波仿真器上工作正常。但是当我从VS15发布Android设备上的构建时,我一直没有得到互联网连接结果。

3 个答案:

答案 0 :(得分:0)

我会用

document.addEventListener("online", yourCallbackFunction, false);

然后在回调函数中将某种变量设置为true。

“离线”也有同样的事件。

通过这种方式,您还可以处理用户在使用应用时断开连接时会发生的情况。

来源:http://docs.phonegap.com/en/1.8.1/cordova_events_events.md.html#online

答案 1 :(得分:0)

我使用了一个名为OnlineJs的JS库,它可以很好地检测在线和离线状态。

试试这个链接:

http://pixelscommander.com/polygon/onlinejs

答案 2 :(得分:0)

foreach($foodtrucktypes as $foodtrucktype)
{
    $type_id = DB::table('foodtruck_types')
        ->select('id')
        ->where('type', '= ', $foodtrucktype)
        ->get();
    echo $foodtrucktype."<br />";
    var_dump($type_id);
    echo "<br />";
    echo "<br />";
}

foreach($locations as $location)
{
    $location_id = DB::table('locations')
        ->select('id')
        ->where('name', '=', $location)
        ->get();

    echo $location."<br />";
    var_dump($location_id);
    echo "<br />";
    echo "<br />";
}

foreach($partytypes as $partytype)
{
    $party_id = DB::table('party_types')
        ->select('id')
        ->where('party_type' ,'=', $partytype)
        ->get();

    echo $partytype."<br :>";
    var_dump($party_id);
    echo "<br />";
    echo "<br />";
}

现在在getConnectionStatus内部检查连接。

function doesConnectionExist() {

    var xhr = new XMLHttpRequest();
    var file = "file url";
    var randomNum = Math.round(Math.random() * 10000);
connection=getConnectionStatus();
if(connection){
 xhr.open('HEAD', file + "?rand=" + randomNum, false);

    try {
        xhr.send();

        if (xhr.status >= 200 && xhr.status < 304) {
            return true;
        } else {
            return false;
        }
    } catch (e) {
       return false;
    }
}

states []数组用于了解你可以操作的所有类型的网络信息。

希望它有所帮助。