iOS Tutorial BLE Chat - Connecting Android and iOS

Erel

Administrator
Staff member
Licensed User

This example is based on the new PeripheralManager type introduced in iBLE v2.00.
Please start with this tutorial: https://www.b4x.com/android/forum/threads/ble-bluetooth-low-energy-peripheral.66542/

There are three programs: BlePeripheral, BleCentral_iOS and BleCentral_Android

BlePeripheral is the one that implements the peripheral role.
The other devices will connect to the peripheral and communicate with it. The peripheral will relay the messages to all connected devices.

The code is quite simple. I will go over some interesting points:
- The peripheral stores the connected central ids in a Map (as keys). This makes it easy to add or remove centrals without needing to deal with duplicates.

- The centrals maintain a list with the messages that need to be sent. Only one message can be sent at a time so when WriteComplete is raised the next message is sent.

- In B4i we need to call WriteWithResponse instead of Write as a response is expected. In B4A it is handled automatically.

- The UUID sub is a useful utility that normalizes the 16 bit ids (4 hex characters) based on the platform:
B4X:
Private Sub UUID(id As String) As String
#if B4A
   Return "0000" & id.ToLowerCase & "-0000-1000-8000-00805f9b34fb"
#else if B4I
   Return id.ToUpperCase
#End If
End Sub
- In B4i central we need to first call ReadData before we can call SetNotify and wait for the DataAvailable event.

- In B4A the communication code is implemented in the Starter service.
 

Attachments

Last edited:

elpic76

Member
Licensed User
Hi all,
is it possible to have an example of a peripheral in B4A (BlePeripheral_B4A)? Or maybe the example is already available on the forum but I didn't find.
Thanks in advance
 

Hypnos

Active Member
Licensed User
Good! I have an App on both iOS and Android platform, and now with this library I can implement some useful feature by the BLE communication.

iDevice <-> iDevice worked
iDevice <-> Android worked

But for Android <-> Android, I need to find another way to communication. Hopefully the Android BLE library can support Peripheral mode later even there are not too many android device support it at this moment!

Thanks!
 

Erel

Administrator
Staff member
Licensed User
BleCentral_B4A and BlePeripheral_B4i were updated. There are a few new requirements:
In B4i:
B4X:
#PlistExtra: <key>NSBluetoothAlwaysUsageDescription</key><string>Bluetooth used to connect to ...</string>
In B4A:
B4X:
AddPermission(android.permission.ACCESS_FINE_LOCATION)
And handling it at runtime.

It would be easier to use B4XPages instead of splitting the implementation between the starter service and the main activity.
 
Top