Italian Timeout e disconnessione dispositivo Bluetooth

SimonAndroid

Active Member
Licensed User
Longtime User
Buonasera, volevo sapere come risolvere un problema durante lo scollegamento di un dispositivo Bluetooth in emulazione tastiera, provo a spiegare meglio. Il dispositivo Bluetooth che ho collegato al mio tablet è un lettore di codici a barre, sembra che dopo un certo periodo di tempo di inutilizzo del dispositivo, parliamo di circa 10 minuti, questo venga scollegato mandando un codice che non sono in grado di intercettare, forse un codice di escape. Nel caso sia su una maschera di input la maschera viene chiusa in modo improvviso, nonostante abbia provato ad utilizzare un breakpoint per intercettare l'evento non ci sono riuscito. Qualsiasi suggerimento potrebbe essere molto importante ho provato ad utilizzare anche un altro lettore di codici a barre Bluetooth es. di marca Zebra, ma ho avuto la stessa problematica. Escludendo la connessione via SPP, quale altro tentativo potrei eseguire per gestire l'evento ed evitare la chiusura della form improvvisamente e senza controllo.
Cordialmente
 

LucaMs

Expert
Licensed User
Longtime User
Non ho mai smanettato con "accessori" collegati a dispositivi Android, ergo magari sto per scrivere una stupidaggine (il che non sarebbe una novità 😄).

L'app è ancora attiva? Non sarà che il S.O. l'abbia uccisa perché troppo tempo in background? Se fosse così, potresti aggiungere un timer in un servizio che gli faccia eseguire una cosa qualsiasi, anche un log, ogni 3 minuti, ad esempio.
 
Last edited:

SimonAndroid

Active Member
Licensed User
Longtime User
You don't have any control over non-SPP connections. It is the OS that manages the connection.
Buongiorno, mi ha risposto direttamente Erel sul forum in inglese, e purtroppo mi ha detto che non abbiamo controllo salvo utilizzare la connessione seriale SPP.
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Ciao,
io uso il lettore Bluetooth per una mia app di inventario, non ho riscontrato il problema, verifica che non sia il lettore ad andare in standby.
quelli che utilizzo io si possono programmare con un barcode, se metto sempre on, non si disconette mai.
 

SimonAndroid

Active Member
Licensed User
Longtime User
Ciao,
io uso il lettore Bluetooth per una mia app di inventario, non ho riscontrato il problema, verifica che non sia il lettore ad andare in standby.
quelli che utilizzo io si possono programmare con un barcode, se metto sempre on, non si disconette mai.
Scusa.. giusto per capire meglio, che tipo di lettore utilizzi? Potresti indicarmi marca e modello, ed Inoltre lo utilizzi in emulazione tastiera o tramite il canale SPP?
 

Lello1964

Well-Known Member
Licensed User
Longtime User
ti passo un pezzo di codice, ho provato a riprenderlo da una vecchia app,

lo devi adattare, ma funziona


B4X:
#Region  Service Attributes
    #StartAtBoot: False
    
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim scanner As Serial
    Dim BarcodeData As AsyncStreams  'libreria RandomAccessFile
    '
End Sub

Sub Service_Create
    scanner.Initialize("scanner")
End Sub

Sub Service_Start (StartingIntent As Intent)
    If Home.ssl_bluetooth Then CallSub(Null, ScanForBC)
End Sub

Sub Service_Destroy
    If Home.ssl_bluetooth Then scanner.Disconnect
End Sub

Sub ScanForBC
    If scanner.IsEnabled Then
        Dim Devices As Map = scanner.GetPairedDevices
        For i = 0 To Devices.Size - 1
            Dim DeviceName As String = Devices.GetKeyAt(i)
            'Log (DeviceName)
            If DeviceName.ToUpperCase.StartsWith(Home.nome_bluetooth.ToUpperCase.trim) Then ' CT10 = The start of my barcode scanner name(CT1013720208)
                scanner.Connect2(Devices.GetValueAt(i), "00001101-0000-1000-8000-00805F9B34FB" )
            End If
        Next
    Else
        ToastMessageShow("Lettore Barcode non presente", False)
    End If
End Sub

Sub scanner_Connected(Success As Boolean)
    If Success Then
        scanner.Listen
        BarcodeData.Initialize(scanner.InputStream, scanner.OutputStream, "BarcodeData")
        ToastMessageShow("Lettore Barcode connesso", False)
    Else
        ToastMessageShow("Errore connessione con Lettore Barcode. ["&Home.nome_bluetooth&"]", False)
    End If
End Sub

Sub BarcodeData_NewData(Buffer() As Byte)
    Dim Barcode As String = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
    If Main.bluetooth_loc <> Null Or Main.bluetooth_loc <> "" Then
        Log("Main.bluetooth_loc = "&Main.bluetooth_loc)
        CallSubDelayed2(Main.bluetooth_loc, "read_item_barcode", Barcode)   
    End If
End Sub

Sub BarcodeData_Error
    ToastMessageShow("Lettore Barcode disconnesso", False)
    If Home.ssl_bluetooth Then CallSub(Null, ScanForBC)
End Sub

Sub check_scanner As Boolean
    If scanner.IsEnabled Then
        Dim Devices As Map = scanner.GetPairedDevices
        For i = 0 To Devices.Size - 1
            Dim DeviceName As String = Devices.GetKeyAt(i)
            'Log (DeviceName)
            If DeviceName.ToUpperCase.StartsWith(Home.nome_bluetooth.ToUpperCase.trim) Then ' CT10 = The start of my barcode scanner name(CT1013720208)
                scanner.Connect2(Devices.GetValueAt(i), "00001101-0000-1000-8000-00805F9B34FB" )
                Return True
            End If
        Next
        Return False
    Else
        ToastMessageShow("Lettore Barcode non presente", False)
        Return False
    End If
End Sub

deve essere un service da avviare con la app
 

SimonAndroid

Active Member
Licensed User
Longtime User
ti passo un pezzo di codice, ho provato a riprenderlo da una vecchia app,

lo devi adattare, ma funziona


B4X:
#Region  Service Attributes
    #StartAtBoot: False
   
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim scanner As Serial
    Dim BarcodeData As AsyncStreams  'libreria RandomAccessFile
    '
End Sub

Sub Service_Create
    scanner.Initialize("scanner")
End Sub

Sub Service_Start (StartingIntent As Intent)
    If Home.ssl_bluetooth Then CallSub(Null, ScanForBC)
End Sub

Sub Service_Destroy
    If Home.ssl_bluetooth Then scanner.Disconnect
End Sub

Sub ScanForBC
    If scanner.IsEnabled Then
        Dim Devices As Map = scanner.GetPairedDevices
        For i = 0 To Devices.Size - 1
            Dim DeviceName As String = Devices.GetKeyAt(i)
            'Log (DeviceName)
            If DeviceName.ToUpperCase.StartsWith(Home.nome_bluetooth.ToUpperCase.trim) Then ' CT10 = The start of my barcode scanner name(CT1013720208)
                scanner.Connect2(Devices.GetValueAt(i), "00001101-0000-1000-8000-00805F9B34FB" )
            End If
        Next
    Else
        ToastMessageShow("Lettore Barcode non presente", False)
    End If
End Sub

Sub scanner_Connected(Success As Boolean)
    If Success Then
        scanner.Listen
        BarcodeData.Initialize(scanner.InputStream, scanner.OutputStream, "BarcodeData")
        ToastMessageShow("Lettore Barcode connesso", False)
    Else
        ToastMessageShow("Errore connessione con Lettore Barcode. ["&Home.nome_bluetooth&"]", False)
    End If
End Sub

Sub BarcodeData_NewData(Buffer() As Byte)
    Dim Barcode As String = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
    If Main.bluetooth_loc <> Null Or Main.bluetooth_loc <> "" Then
        Log("Main.bluetooth_loc = "&Main.bluetooth_loc)
        CallSubDelayed2(Main.bluetooth_loc, "read_item_barcode", Barcode)  
    End If
End Sub

Sub BarcodeData_Error
    ToastMessageShow("Lettore Barcode disconnesso", False)
    If Home.ssl_bluetooth Then CallSub(Null, ScanForBC)
End Sub

Sub check_scanner As Boolean
    If scanner.IsEnabled Then
        Dim Devices As Map = scanner.GetPairedDevices
        For i = 0 To Devices.Size - 1
            Dim DeviceName As String = Devices.GetKeyAt(i)
            'Log (DeviceName)
            If DeviceName.ToUpperCase.StartsWith(Home.nome_bluetooth.ToUpperCase.trim) Then ' CT10 = The start of my barcode scanner name(CT1013720208)
                scanner.Connect2(Devices.GetValueAt(i), "00001101-0000-1000-8000-00805F9B34FB" )
                Return True
            End If
        Next
        Return False
    Else
        ToastMessageShow("Lettore Barcode non presente", False)
        Return False
    End If
End Sub

deve essere un service da avviare con la app
Scusa se disturbo, ho ricevuto ieri il lettore comprato su AliExpress, quando citi Home.ssl_bluetooth a quale libreria ti riferisci? Grazie in anticipo
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Ciao ssl_bluetooth è una variabile boolean che utizzo per sapere se c'è il lettore, se true viene eseguita la sub.
 

Lello1964

Well-Known Member
Licensed User
Longtime User

SimonAndroid

Active Member
Licensed User
Longtime User
Ciao Lello, anch'io ho acquistato il modello EYOYO-015 però in modalità SPP dopo che mi si disconnette non si riconnette in automatico perciò sono in difficoltà, addirittura mi scompare dalla lista dei dispositivi bluetooth.. sono costretto a riavviare il tablet, probabilmente c'è un problema di firmware.. Ho provato a scrivere all'azienda ma per ora non ho ricevuto risposta.
 

Lello1964

Well-Known Member
Licensed User
Longtime User
Il modello che ho preso è il EY-017, lo sto provando, sembra andare bene.

Lo sto utilizzando in modalità SSP.
 

SimonAndroid

Active Member
Licensed User
Longtime User
Si riconnette in automatico, senza problemi? Può darsi che debba intervenire sulla configurazione, io un ho fatto reset di fabbrica e ho scansionato il codice di modalità SPP non so se devo fare qualcos'altro, l'ho provato anche con un'applicazione che si chiama 'Serial Bluetooth Terminal' e succede la stessa cosa, essendo il tuo dispositivo il fratello maggiore del mio EY-015 mi immagino che abbia la stessa configurazione se ti viene in mente qualcosa di interessante...
Inoltre....
deve essere un service da avviare con la app
io l'ho messo nell'activity, sto sbagliando devo usare 'Starter' in realtà con il dispositivo 'Koolertron' e un altro 'Motorola' funziona e si riconnette automaticamente presentando la lista dei dispositivi da riconnettere mentre EY-015 non lo fa, probabile che sia difettoso,
dispositivo acquistabile su Amazon: Koolertron Barcode Scanner Portatile QR/2D/1D
l'altro su Aliexpress: EYOYO EY-015
 

SimonAndroid

Active Member
Licensed User
Longtime User
Buongiorno a tutti, per caso qualcuno ha provato EY-015 o EY-017 con dispositivi Apple tipo IPhone o IPad, mi sapreste indicare un'applicazione in Appstore o meglio se qualcuno ha realizzato qualcosa con B4i per fare un test del dispositivo..
grazie @Lello1964
 
Top