Italian Fallisce su lollipop

Luciano Veneziano

Active Member
Licensed User
Longtime 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
Longtime 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
Longtime 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.
 
D

Deleted member 103

Guest
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

Active Member
Licensed User
Longtime 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
Longtime 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

Active Member
Licensed User
Longtime 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 > ""
 

Luciano Veneziano

Active Member
Licensed User
Longtime 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
 

Luciano Veneziano

Active Member
Licensed User
Longtime User
... ovviamente che ridondanza di codice... sarà ottimizzato solo dopo aver appurato il perfetto funzionamento! :)
 

LucaMs

Expert
Licensed User
Longtime 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