Italian Fallisce su lollipop

Luciano Veneziano

Member
Licensed User
Buongiorno.
Ho finito la mia app. ho solo un problema:
questa funzione genera un'eccezione su lollipop

B4X:
Sub IsConnected As Boolean
    r.Target = r.GetContext
    r.Target = r.RunMethod2("getSystemService", "connectivity", "java.lang.String")
    r.Target = r.RunMethod("getActiveNetworkInfo")
    If r.Target <> Null Then
        Return r.RunMethod("isConnectedOrConnecting")
    End If
    Return False
End Sub
Non voglio usare librerie che non abbiano sorgenti, quindi ... devo trovare una funzione... che funzioni. :)

Qualche suggerimento? (magari mi manca qualcosa sul manifest)?
 

LucaMs

Expert
Licensed User
Ho trovato "'sta roba".

1) si dovrebbe usare Inline Java per implementarla (oppure interpretarla e poi usare JavaObject o Reflector)
2) non so se poi funzioni solo per lollipop (nel qual caso dovresti testare quale sia il S.O. e lanciare la tua o questa)

B4X:
public static boolean checkInternetConnection(Context context)
    {
        try
        {
            ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

            if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected())
                return true;
            else
                return false;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return false;
    }
 

LucaMs

Expert
Licensed User
Oh, comunque potresti usare la mia "libreria" (chiamiamola così), che non è altro che un suggerimento di Erel, di provare a scaricare da internet una pagina "leggera" (Google.it).

Al limite pubblico anche il sorgente, sono poche righe.
 

Filippo

Expert
Licensed User
Buongiorno.
Ho finito la mia app. ho solo un problema:
questa funzione genera un'eccezione su lollipop

B4X:
Sub IsConnected As Boolean
    r.Target = r.GetContext
    r.Target = r.RunMethod2("getSystemService", "connectivity", "java.lang.String")
    r.Target = r.RunMethod("getActiveNetworkInfo")
    If r.Target <> Null Then
        Return r.RunMethod("isConnectedOrConnecting")
    End If
    Return False
End Sub
Non voglio usare librerie che non abbiano sorgenti, quindi ... devo trovare una funzione... che funzioni. :)

Qualche suggerimento? (magari mi manca qualcosa sul manifest)?
Se guardi bene in questo Post c'è schritto quello che deve inserire nel manifest.
 

Luciano Veneziano

Member
Licensed User
Grazie a tutti!

é in una classe, fino alla versione 4 funziona, su lollipop mi da un errore bloccante.
Sto vedendo, invece che caricando una pagina di fare solo un ping che sicuramente è
il massimo della leggerezza.

:)
 

LucaMs

Expert
Licensed User
Grazie a tutti!

é in una classe, fino alla versione 4 funziona, su lollipop mi da un errore bloccante.
Sto vedendo, invece che caricando una pagina di fare solo un ping che sicuramente è
il massimo della leggerezza.

:)
Si ma devi assicurarti che il server risponda sempre al ping, non è detto.
@LucaMs, per mia scelta personale non metto codice di cui non ho il sorgente.
Sì, avevo capito e fai bene (eventuali future modifiche necessarie sei fregato).
La "libreria", cmq, non è altro che fare un download di Google.it; se va buon fine, significa che sei connesso :D. Trovi questo suggerimento fatto da Erel, sul sito.
 

Luciano Veneziano

Member
Licensed User
Alla fine proverò questa... poi verifico se è attraverso i dati o il wifi
B4X:
Dim SB As StringBuilder
SB.Initialize
PH.Shell("ping -c 1 www.google.com"),Null,SB,Null)
return SB.ToString > ""
 

LucaMs

Expert
Licensed User
Mai provato: il comando Shell attende la risposta? Altrimenti ti restituirà spesso False anche se il Ping è riuscito (poco dopo).
 

Luciano Veneziano

Member
Licensed User
Sembra che funzioni... aspetto che sia provato su Lollipop

B4X:
Sub Ping(site As String) As Boolean
    Dim s As String
    Dim SB As StringBuilder
 
    SB.Initialize
    s = "ping -c 1 " & site
    phon.Shell(s,Null,SB,Null)
    s = SB.ToString
    Return s.Length > 4
End Sub

Sub IsConnected As Boolean
 #if DEBUG  
    Return False
#end if
    Return Ping("www.google.com")
End Sub
 

LucaMs

Expert
Licensed User
Ho provato quella in #12 e mi da errore. Quello in #14 non l'ho provato perché stavo cercando ed ho leggermente modificato un codice trovato qui sul sito:

B4X:
Sub Process_Globals
    Private Const PING_TYPE_REPORT As String = "Report"
    Private Const PING_TYPE_SUMMARY As String = "Summary"
    Private Const PING_TYPE_STATUS As String = "Status"
End Sub
B4X:
Sub Activity_Resume
    Dim URL As String = "www.synology.cn"
    Log(URL & " " & Ping(URL, PING_TYPE_STATUS, 1, 30, True))
End Sub

B4X:
Public Sub Ping(URL As String, ResultsType As String, Attempts As Int, Timeout As Int, Message As Boolean) As String
    Dim P As Phone
    Dim Option As String
    Dim SB As StringBuilder : SB.Initialize

    If Message = True Then ProgressDialogShow("Pinging " & URL)
 
    If ResultsType = PING_TYPE_REPORT Then Option = "-v "
    If ResultsType = PING_TYPE_SUMMARY OR ResultsType = PING_TYPE_STATUS Then Option = "-q "
    P.Shell("ping -c " & Attempts & " -W " & Timeout & " " & Option & URL, Null, SB, Null)

    ProgressDialogHide
  
    If SB.Length = 0 OR SB.ToString.Contains("Unreachable") Then Return "Host unreachable"
    Log(SB.ToString)

    If ResultsType <> "Status" Then
        Return SB.ToString
    Else
        Return "Host online"
    End If
End Sub

Notare che ho usato un sito cinese per il test :D
 
Top