Jim McKeeth from Embarcadero has made the source code available (on Github) for a remote control vehicle app that uses Bluetooth for communication available. The code is for Delphi XE5 and AppMethod and runs on Android and probably Windows. Should also work with Delphi XE6 Firemonkey with not many changes. If you are interested in the full Bluetooth interface in Object Pascal for the Android SDK you should check out the Object Pascal Android SDK Interface project on Github. There are interface files for android.bluetooth.BluetoothAdapter, android.bluetooth.BluetoothDevice, and android.bluetooth.BluetoothServerSocket among others. Check out the documentation for Bluetooth on Android here. The app does not make use of Bluetooth discovery (but you could add that yourself) and instead has the MAC address of each device hard coded into. The code makes use of the TJBluetoothAdapter interface to the Android SDK for talking to Bluetooth. Here is some sample code for connecting to the Bluetooth vehicle with the app:

uses Androidapi.JNI.BluetoothAdapter, Android.JNI.Toast, System.SysUtils; function DoConnect(MACAddress: String; out istream: JInputstream; out ostream: JOutputStream): Boolean; var uid: JUUID; targetMAC: string; Adapter: JBluetoothAdapter; remoteDevice: JBluetoothDevice; Sock: JBluetoothSocket; begin uid := TJUUID.JavaClass.fromString (stringtojstring('00001101-0000-1000-8000-00805F9B34FB')); targetMAC := MACAddress; Adapter := TJBluetoothAdapter.JavaClass.getDefaultAdapter; remoteDevice := Adapter.getRemoteDevice(stringtojstring(targetMAC)); Toast('Connecting to ' + targetMAC); Sock := remoteDevice.createRfcommSocketToServiceRecord(uid); try Sock.connect; except Toast('Could not create service record!'); Exit(False); end; if not Sock.isConnected then begin Toast('Failed to connect to ' + targetMAC + '! Try again...'); Exit(False); end; Toast('Connected!'); ostream := Sock.getOutputStream; // record io streams istream := Sock.getInputStream; // Application.ProcessMessages; ostream.write(ord(255)); // ostream.write(ord(255)); // get device id (nur Chitanda) Sleep(200); Result := True; end; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 uses Androidapi . JNI . BluetoothAdapter , Android . JNI . Toast , System . SysUtils ; function DoConnect ( MACAddress : String ; out istream : JInputstream ; out ostream : JOutputStream ) : Boolean ; var uid : JUUID ; targetMAC : string ; Adapter : JBluetoothAdapter ; remoteDevice : JBluetoothDevice ; Sock : JBluetoothSocket ; begin uid : = TJUUID . JavaClass . fromString ( stringtojstring ( '00001101-0000-1000-8000-00805F9B34FB' ) ) ; targetMAC : = MACAddress ; Adapter : = TJBluetoothAdapter . JavaClass . getDefaultAdapter ; remoteDevice : = Adapter . getRemoteDevice ( stringtojstring ( targetMAC ) ) ; Toast ( 'Connecting to ' + targetMAC ) ; Sock : = remoteDevice . createRfcommSocketToServiceRecord ( uid ) ; try Sock . connect ; except Toast ( 'Could not create service record!' ) ; Exit ( False ) ; end ; if not Sock . isConnected then begin Toast ( 'Failed to connect to ' + targetMAC + '! Try again...' ) ; Exit ( False ) ; end ; Toast ( 'Connected!' ) ; ostream : = Sock . getOutputStream ; // record io streams istream : = Sock . getInputStream ; // Application.ProcessMessages; ostream . write ( ord ( 255 ) ) ; // ostream . write ( ord ( 255 ) ) ; // get device id (nur Chitanda) Sleep ( 200 ) ; Result : = True ; end ;

Jim has a blog post and some videos up where the app is explained and demonstrated. You can check that out here. Find out more about the remote control vehicle and where to buy one here.

Or head over to Github and download the Delphi XE5 Firemonkey source code for the Bluetooth remote control car app.