I'm having some problem connecting to a serial bluetooth OBDII-Dongle. I basically took the Chat Example tutorial to send an ATZ command to the Dongle (which basically behaves like a serial modem).
The problem is not talking to the dongle, if I finally get the connection up it works fine. But connecting is giving me a headache. Sometimes I get a [JSR82] connect: Connection is not connected: false error, sometime I get java.io.IOException: Service discovery failed and sometimes it works and I can send data.
Sometimes disabling/enabling bluetooth helps, sometimes restarting the tablet is necessary.
To speed things up I even tried removing the discovery code and substituting a direct connect to the known and paired device via serial1.connect("00:02:5D:B3:52:F1"). It makes no difference. The weird thing is, sometimes If I retry a couple of times it will suddenly connect.
Am I missing something? Is there a simple example anywhere, without using discovery, pairing, etc, where I can just fire up the app and connect to a known device via Mac-adress?
Here's my code, which you can see I mangled a bit. I put the connect command in multiple places, so I can see whats happening:
The problem is not talking to the dongle, if I finally get the connection up it works fine. But connecting is giving me a headache. Sometimes I get a [JSR82] connect: Connection is not connected: false error, sometime I get java.io.IOException: Service discovery failed and sometimes it works and I can send data.
Sometimes disabling/enabling bluetooth helps, sometimes restarting the tablet is necessary.
To speed things up I even tried removing the discovery code and substituting a direct connect to the known and paired device via serial1.connect("00:02:5D:B3:52:F1"). It makes no difference. The weird thing is, sometimes If I retry a couple of times it will suddenly connect.
Am I missing something? Is there a simple example anywhere, without using discovery, pairing, etc, where I can just fire up the app and connect to a known device via Mac-adress?
Here's my code, which you can see I mangled a bit. I put the connect command in multiple places, so I can see whats happening:
B4X:
'Activity module
Sub Process_Globals
Dim admin As BluetoothAdmin
Dim serial1 As Serial
Dim foundDevices As List
Type NameAndMac (Name As String, Mac As String)
Dim connectedDevice As NameAndMac
End Sub
Sub Globals
Dim btnSearchForDevices As Button
Dim btnAllowConnection As Button
End Sub
Sub Wait(Seconds As Int)
Dim ti As Long
ti=DateTime.Now+(Seconds*1000)
Do While DateTime.now < ti
DoEvents
Loop
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("1")
If FirstTime Then
admin.Initialize("admin")
serial1.Initialize("serial1")
Wait(10)
'serial1.Connect("00:02:5D:B3:52:F1")
End If
End Sub
Sub Activity_Resume
btnSearchForDevices.Enabled = False
btnAllowConnection.Enabled = False
If admin.IsEnabled = False Then
If admin.Enable = False Then
ToastMessageShow("Error enabling Bluetooth adapter.", True)
Else
ToastMessageShow("Enabling Bluetooth adapter...", False)
'the StateChanged event will be soon raised
End If
Else
Admin_StateChanged(admin.STATE_ON, 0)
End If
End Sub
Sub Admin_StateChanged (NewState As Int, OldState As Int)
btnSearchForDevices.Enabled = (NewState = admin.STATE_ON)
btnAllowConnection.Enabled = btnSearchForDevices.Enabled
End Sub
Sub Activity_Pause (UserClosed As Boolean)
If UserClosed = True Then
serial1.Disconnect
End If
End Sub
Sub btnSearchForDevices_Click
'foundDevices.Initialize
'If admin.StartDiscovery = False Then
' ToastMessageShow("Error starting discovery process.", True)
'Else
' ProgressDialogShow("Searching for devices...")
'End If
'Admin_DiscoveryFinished
serial1.Connect("00:02:5D:B3:52:F1")
End Sub
Sub Admin_DiscoveryFinished
' If foundDevices.Size = 0 Then
' ToastMessageShow("No device found.", True)
' Else
' Dim l As List
' l.Initialize
' For i = 0 To foundDevices.Size - 1
' Dim nm As NameAndMac
' l.Add(nm.Name)
' Next
' Dim res As Int
' res = InputList(l, "Choose device to connect", -1)
' If res <> DialogResponse.CANCEL Then
' connectedDevice = foundDevices.Get(res)
' ProgressDialogShow("Trying to connect to: " & connectedDevice.Name & " (" & connectedDevice.Mac & ")")
' serial1.Connect(connectedDevice.Mac)
serial1.Connect("00:02:5D:B3:52:F1")
' End If
' End If
End Sub
Sub Admin_DeviceFound (Name As String, MacAddress As String)
Log(Name & ":" & MacAddress)
Dim nm As NameAndMac
nm.Name = Name
nm.Mac = MacAddress
foundDevices.Add(nm)
ProgressDialogShow("Searching for devices (~ device found)...".Replace("~", foundDevices.Size))
End Sub
Sub btnAllowConnection_Click
'this intent makes the device discoverable for 300 seconds.
Dim i As Intent
i.Initialize("android.bluetooth.adapter.action.REQUEST_DISCOVERABLE", "")
i.PutExtra("android.bluetooth.adapter.extra.DISCOVERABLE_DURATION", 300)
StartActivity(i)
serial1.Listen
End Sub
Sub Serial1_Connected (Success As Boolean)
ProgressDialogHide
Log("connected: " & Success)
If Success = False Then
Log(LastException.Message)
ToastMessageShow("Error connecting: " & LastException.Message, True)
Else
StartActivity(ChatActivity)
End If
End Sub