B4J Question jBluetooth Pairing

Discussion in 'B4J Questions' started by walterf25, Jun 5, 2019.

  1. walterf25

    walterf25 Well-Known Member Licensed User

    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:
    Code:
    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 StringAs 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.
    Code:
    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
     
  2. Erel

    Erel Administrator Staff Member Licensed User

    What happens if they are not paired? Are you able to detect the other device?
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice