Hello everyone, i have written an app which searches for a certain device UID, I have a B4A app running on a device which is running Android 8.0 which basically just listens when the B4J app tries to connect, I followed @Erel 's tutorial here, My question is this, everything seems to work only when I pair the devices manually through the Bluetooth Settings from the Android device, is there a way to automatically have both my Laptop and Android device pair automatically?
here is the B4J Code:
And Here's the relevant code from the B4A app, i have the code running in a Service.
Does anyone know if it's possible to pair to a device without manually having to do it?
Thanks,
Walter
here is the B4J Code:
B4X:
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
MainForm.SetFormStyle("UNIFIED")
MainForm.RootPane.LoadLayout("main") 'Load the layout file.
MainForm.Show
MainForm.Title = "Hermosa Temp Tester"
lblConnection.Text = "Disconnected"
foundDevices.Initialize
bt.Initialize("bt")
If bt.IsEnabled Then
bt.Listen2("0000FE45-0000-1000-8000-00805F9B34FB")
End If
End Sub
'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
Return True
End Sub
Sub btnSearch_Click
Dim res As Boolean = bt.StartDiscovery
If res Then
searchingfordevices = True
lv1.Items.Clear
''UpdateState
Else
Log("Error starting discovery")
End If
End Sub
Sub btnConnect_Click
Dim address As String = foundDevices.Get(lv1.SelectedItem)
Log("connecting to: " & address)
bt.Connect(address)
End Sub
#Region Bluetooth Functions
Sub bt_DeviceFound (Name As String, MacAddress As String)
Dim description As String = Name & ": " & MacAddress
lv1.Items.Add(description)
foundDevices.Put(description, MacAddress)
End Sub
Sub bt_Connected (Success As Boolean, Connection As BluetoothConnection)
Log($"Connected, success=${Success}"$)
If Success Then
currentconnection = Connection
connected = True
lblConnection.Text = "Connected to: " & Connection.Name
If astream.IsInitialized Then astream.Close
astream.InitializePrefix(Connection.InputStream, True, Connection.OutputStream, "AStream")
End If
bt.Listen
End Sub
And Here's the relevant code from the B4A app, i have the code running in a Service.
B4X:
Sub Service_Create
Dim n As Notification
n.Initialize
n.SetInfo("TempTester", "Hermosa Temp Tester", Main)
Service.StartForeground(1, n)
admin.Initialize("admin")
serial1.Initialize("serial1")
foundDevices.Initialize
Dim i As Intent
i.Initialize("android.bluetooth.adapter.action.REQUEST_DISCOVERABLE", "")
i.PutExtra("android.bluetooth.adapter.extra.DISCOVERABLE_DURATION", 300)
StartActivity(i)
ph.Initialize("ph")
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
serial1.Listen
End Sub
Sub Service_Start (StartingIntent As Intent)
Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
End Sub
Sub Service_Destroy
End Sub
Sub StartDiscovery
If admin.StartDiscovery = False Then
ToastMessageShow("Error starting discovery process.", True)
Else
''ProgressDialogShow("Searching for devices...")
CallSubDelayed(Main, "showDevices")
End If
End Sub
Sub Admin_DiscoveryFinished
ProgressDialogHide
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
nm = foundDevices.Get(i)
l.Add(nm.Name)
Next
CallSubDelayed3(Main, "ShowDevicesFound", l, foundDevices)
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))
CallSubDelayed2(Main, "AddDevices", "Searching for devices ( ~ device found)...".Replace("~", foundDevices.Size))
End Sub
Sub Connect(mac As String)
serial1.Connect(mac)
End Sub
Sub astream_NewData (Buffer() As Byte)
End Sub
Sub astream_Terminated
LogColor("astreams terminated", Colors.Red)
End Sub
Sub astream_Error
LogColor("astreams error", Colors.Red)
astream.Close
serial1.Disconnect
connected = False
End Sub
Sub serial1_Connected (Success As Boolean)
LogColor("connection succesful: " & Success, Colors.Blue)
If Success Then
connected = True
If astream.IsInitialized = False Then
astream.InitializePrefix(serial1.InputStream, True, serial1.OutputStream, "AStream")
End If
ProgressDialogHide
Else
ProgressDialogHide
LogColor("connection failed", Colors.Red)
End If
End Sub
Does anyone know if it's possible to pair to a device without manually having to do it?
Thanks,
Walter