Понадобилось мне как то приложение на телефон с OS Android, для работы с моим устройством на микроконтроллере через Bluetooth. И вот я уже погрузился в изучение Bluetooth в android studio.
Составим простой алгоритм работы:
- При запуске приложения на телефоне, отобразим все Bluetooth устройства, которые уже спарены с телефоном.
- Организуем поиск новых устройств.
- Далее, по нажатию на устройство в списке, сделаем спаривание с этим устройством ( конечно же не для того, что бы появились маленькие Bluetooth –ики, этого требует протокол работы bluetooth)
- Создадим класс для подключение устройств друг с другом по протоколу SPP.
Что ж, план намечен приступаем к действию. Так как статья получается довольно обширная, по этому 3 и 4 пункты опишем в следующей статье.
Включение Bluetooth в телефоне
Что бы начать работать с Bluetooth первым делом его надо включить. Рассмотрим функцию реализующую проверку на включение Bluetooth, и если выключен, предлагает пользователю включить его.
public boolean BluetoothON() {
if (!bleAdapter.isEnabled()) {
Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED)
{
return false;
}
startActivity(turnOn);
} else {
return true;
}
return false;
}
Здесь, первым делом мы проверяем есть ли у нас в системе Bluetooth адаптер. Если есть, создаем intent с действием на включение блютуза. Так же нам надо проверить есть ли разрешение на работу с блютуз в манифесте. Результатом работы кода будет следующий рисунок.
Bluetooth в Android Studio: показываем сопряженные устройства
Рассмотрим данный вопрос на примере приведенного ниже кода.
public void GetPairDevise(ArrayList<String> list, BluetoothAdapter bluetoothAdapter) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
// Выдать сообщение о ошибке
return;
}
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
arrayNewDevice.add(device);
list.add(device.getName() + " - " + device.getAddress());
}
}
}
И так, функция принимает на вход переменную типа ArrayList. В этот массив мы помещаем найденные в системе устройства.
Вторым параметром наш BluetoothAdapter. По сути это наш физический модуль Bluetooth в телефоне. Узнаем о его присутствии через функцию:
getDefaultAtapter();
BluetoothAdapter bleAdapter = BluetoothAdapter.getDefaultAdapter();
Далее необходимо проверить, есть ли необходимые разрешение в нашем файле Манифесте. Без них Bluetooth работать не будет.
Функцией:
getBondedDevices(),
получаем все сопряженные устройства.
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
Далее в цикле проходим по всему сету и добавляем наши устройства в массив для дальнейшей работы и в список отображение. На картинке ниже, результат работы нашей функции.
Bluetooth в android studio: поиск устройств
Поиск новых устройств запускает функция bluetoothAdapter.startDiscovery(). Результат работы будет в обработчике событий BroadcastResiver. Это класс в котором идет обработка сообщений.
Посмотрим нижеприведенный код. Сначала мы очистим наши списки. Далее проверим разрешение в манифесте и запустим функцию bluetoothAdapter.startDiscovery(). Инициируем два события: поиск устройств и окончание поиска устройств. После этого регистрируем каждое событие Bluetooth.
public void GetScanDevise(BluetoothAdapter mYBluetoothAdapter) {
if (listNewDeviceAdapter.getCount() != 0)
listNewDeviceAdapter.clear();
arrayNewDevice.clear();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
return;
}
myBleAdapter.startDiscovery();
IntentFilter myFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mResiver, myFilter);
myFilter = new IntentFilter((BluetoothAdapter.ACTION_DISCOVERY_FINISHED));
registerReceiver(mResiver, myFilter);
}
private final BroadcastReceiver mResiver = new BroadcastReceiver() {
@SuppressLint("MissingPermission")
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
myDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (myDevice.getName() != null) {
arrayNewDevice.add(myDevice);
deviseScanList.add(myDevice.getName() + " - " + myDevice.getAddress());
listDevice.setAdapter(listNewDeviceAdapter);
}
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
myBleAdapter.cancelDiscovery();
}
}
};
Внимание! Что бы вновь начать поиск новых устройств, необходимо убедиться, что предыдущий поиск остановлен.
Также можно перед стартом нового поиска сначала вызвать функцию
bleAdapter.cancelDiscovery();
Результат работы кода будет представлен на картинке ниже.
Внимание! Данный программный код представлен из реально работающей программы. Описывал все так как понял сам, читая открытые источники. К сожалению я не являюсь программистом Android, по этому говорю честно, данную задачу можно реализовать красивым и правильным кодом. В этой статье описан просто рабочий код и принцип работы с Bluetooth в android studio на языке java.







Спасибо автор!