Bluetooth & AsyncStreams problem

ygz12345

Member
Licensed User
Longtime User
Bluetooth code copy directly from Erel's tutorial so i think should be no problem

B4X:
#Region Module Attributes
   #FullScreen: False
   #IncludeTitle: True
   #ApplicationLabel: Bluetooth Example
   #VersionCode: 1
   #VersionName: 
   #SupportedOrientations: unspecified
   #CanInstallToExternalStorage: False
#End Region

'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 Activity_Create(FirstTime As Boolean)
   If FirstTime Then
      admin.Initialize("admin")
      serial1.Initialize("serial1")
   End If
   Activity.LoadLayout("1")
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
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
      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.ConnectInsecure(admin,connectedDevice.Mac,1)
      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

From code above, when devices connected, it will start chatactivity. Below are my chatactivity code.

B4X:
#Region Module Attributes
   #FullScreen: False
   #IncludeTitle: True
#End Region

'Activity module
Sub Process_Globals
   Dim AStream As AsyncStreams
End Sub

Sub Globals
   Dim txt As String
   Dim button1 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("2")
   If AStream.IsInitialized = False Then
      AStream.InitializePrefix(Main.serial1.InputStream, True, Main.serial1.OutputStream, "AStream")
   End If
End Sub

Sub AStream_Error
   ToastMessageShow("Connection is broken.", True)
End Sub

Sub AStream_Terminated
   AStream_Error
End Sub

Sub Activity_Resume
   
End Sub

Sub Activity_Pause (UserClosed As Boolean)
   If UserClosed Then
      AStream.Close
   End If
End Sub


Sub Button1_Down
txt="w"
      AStream.Write(txt.GetBytes("UTF8"))
End Sub
Sub Button1_Up
txt="s"
      AStream.Write(txt.GetBytes("UTF8"))
End Sub

when button1_down it suppose to send "w" and button1_up is send "s".

but i didnt receive neither "w" or "s" .... any idea ??
 
Top