A Library for easy implementation of Serial Bluetooth Classic and Low Energy on Android. 💙
- Bluetooth Classic working from Android 2.1 (API 7)
- Bluetooth Low Energy working from Android 4.3 (API 18)
Looking for React Native
version? See also react-native-easybluetooth-classic and react-native-easybluetooth-le
BluetoothClassicExtendedService extends the classic service with the following features:
- Opens bluetooth server socket to accept connections.
- Makes devices discoverable
BluetoothConfiguration config = new BluetoothConfiguration();
config.context = getApplicationContext();
config.bluetoothServiceClass = BluetoothClassicService.class;
config.bufferSize = 1024;
config.characterDelimiter = '\n';
config.deviceName = "Your App Name";
config.callListenersInMainThread = true;
config.uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); // Required
BluetoothService.init(config);
BluetoothConfiguration config = new BluetoothConfiguration();
config.context = getApplicationContext();
config.bluetoothServiceClass = BluetoothLeService.class;
config.bufferSize = 1024;
config.characterDelimiter = '\n';
config.deviceName = "Your App Name";
config.callListenersInMainThread = true;
config.uuidService = UUID.fromString("e7810a71-73ae-499d-8c15-faa9aef0c3f2"); // Required
config.uuidCharacteristic = UUID.fromString("bef8d6c9-9c21-4c9e-b632-bd58c1009f9f"); // Required
config.transport = BluetoothDevice.TRANSPORT_LE; // Required for dual-mode devices
config.uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); // Used to filter found devices. Set null to find all devices.
BluetoothService.init(config);
BluetoothService service = BluetoothService.getDefaultInstance();
service.setOnScanCallback(new BluetoothService.OnBluetoothScanCallback() {
@Override
public void onDeviceDiscovered(BluetoothDevice device, int rssi) {
}
@Override
public void onStartScan() {
}
@Override
public void onStopScan() {
}
});
service.startScan(); // See also service.stopScan();
service.setOnEventCallback(new BluetoothService.OnBluetoothEventCallback() {
@Override
public void onDataRead(byte[] buffer, int length) {
}
@Override
public void onStatusChange(BluetoothStatus status) {
}
@Override
public void onDeviceName(String deviceName) {
}
@Override
public void onToast(String message) {
}
@Override
public void onDataWrite(byte[] buffer) {
}
});
service.connect(device); // See also service.disconnect();
BluetoothWriter writer = new BluetoothWriter(service);
writer.writeln("Your text here");
See the sample project.
-
Add it in your root build.gradle at the end of repositories:
allprojects { repositories { ... maven { url "https://jitpack.io" } } }
-
Add the dependency
2.1. Bluetooth Classic
dependencies { compile 'com.github.douglasjunior.AndroidBluetoothLibrary:BluetoothClassicLibrary:0.3.5' }
2.2. Bluetooth Low Energy
dependencies { compile 'com.github.douglasjunior.AndroidBluetoothLibrary:BluetoothLowEnergyLibrary:0.3.5' }
-
Add permission in
AndroidManifest.xml
<manifest ...>
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
...
</manifest>
- Location needs to be enabled for Bluetooth Low Energy Scanning on Android 6.0 http://stackoverflow.com/a/33045489/2826279
New features, bug fixes and improvements are welcome! For questions and suggestions use the issues.
Before submit your PR, run the gradle check.
./gradlew build connectedCheck
The MIT License (MIT)
Copyright (c) 2015 Douglas Nassif Roma Junior
See the full licence file.