Checking Quality of Internet Connection


#1

What is the best practice of insuring an android devices internet connection is sound enough for file transfers and AJAX calls?

Thanks for any input.


#2

This looks promising, but I can’t get it to run in NAB APPStudio.
Granted I mostly a Visual Basic guy. I put this between Javascript tags -
Uncaught SyntaxError: Unexpected identifier

public boolean isOnline() {
    Runtime runtime = Runtime.getRuntime();
    try {
        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int     exitValue = ipProcess.waitFor();
        return (exitValue == 0);
    }
    catch (IOException e)          { e.printStackTrace(); }
    catch (InterruptedException e) { e.printStackTrace(); }

    return false;
}

#3

I don’t believe there’s a reliable way to know that on the front end. As a result, handling an Ajax error should the connection fail is an important piece of code to include in your app.

In JavaScript, there are a couple of things you can check to give you an idea of the state of the network connection, but they don’t always ‘tell the truth’, so to speak.
navigator.onLine
navigator.connection.downlink (Chrome only)

Google them for more info.

Your code example above doesn’t appear to be JavaScript, which is probably why it’s not working in AppStudio.

Kind regards,
Doug


#4

The best way is to pull a file from your server and time it. Depending on testing you can figure what is Good, Marginal and Poor connections.

Function GetBandwidth(openForm)
  WaitCursor(True)
  gSignalStrength = ""
  gGetBandWidth = ""
  gt0 = 0
  gt1 = 0
gToForm = openForm
'console.log(gToForm)
txtPassword ="password=password"
gt0 = performance.now()
reqInternet=Ajax("http://yourServer.com/GetBandwidth.php","POST",txtPassword, AjaxBandwidthSuccess, AjaxBandwidthFail)
End Function

Function AjaxBandwidthSuccess()
gt1 = performance.now()
  If  (reqInternet.status = 200) Then 'success
 gGetBandWidth = "SUCCESS"
 varSpeed = Round(gt1-gt0, 1)
If varSpeed >= 1 And varSpeed <= 400 Then gSignalStrength = "GOOD"
If varSpeed > 400 And varSpeed <=800 Then gSignalStrength = "MARGINAL"
If varSpeed > 800 Then gSignalStrength = "POOR"
Select Case gSignalStrength
    Case "GOOD"
    MsgBox("DEVICE CONNECTED TO SERVER: " & vbCRLF & "SIGNAL STRENGTH IS " & gSignalStrength,0,gGetBandWidth & " : " & CStr(varSpeed))
    Case "MARGINAL" 
    MsgBox("DEVICE CONNECTED TO SERVER: " & vbCRLF & "SIGNAL STRENGTH IS " & gSignalStrength,0,gGetBandWidth & " : " & CStr(varSpeed))
    Case "POOR"
    MsgBox("DEVICE CONNECTED TO SERVER: " & vbCRLF & "SIGNAL STRENGTH IS " & gSignalStrength,0,gGetBandWidth & " : " & CStr(varSpeed))
    gGetBandWidth = "FAILED"
    Case Else
        gGetBandWidth = "FAILED"
    MsgBox("Your DEVICE CANNOT REACH HQ" & vbCRLF & "Check Connection and Retry",0,gGetBandWidth)
    End Select
  Else
    gGetBandWidth = "FAILED"
    MsgBox("Your DEVICE CANNOT REACH HQ" & vbCRLF & "Check Connection and Retry",0,gGetBandWidth)
 
 End If
'console.log("Call took "  & (gt1 - gt0) & " milliseconds." & vbCRLF & gSignalStrength)
If gGetBandWidth = "SUCCESS" Then
  ChangeForm(window[gToForm])
End If
WaitCursor(False)
End Function

Function AjaxBandwidthFail()
gGetBandWidth = "FAILED"
MsgBox("Your DEVICE CANNOT REACH HQ" & vbCRLF & "Check Connection and Retry",0,gGetBandWidth)
WaitCursor(False)
End Function

#5

Hi.

you can use phonegap functionality to determine the Internet connection type that you have… 2g, 3g, 4g and wifi.

perhaps you can restrict the file transfer only with 4g or wifi