Bluetooth в Android Studio

Понадобилось мне как то приложение на телефон с OS Android, для работы с моим устройством на микроконтроллере через Bluetooth.  И вот я уже погрузился в изучение Bluetooth в android studio.

Составим простой алгоритм работы:

  1. При запуске приложения на телефоне, отобразим все Bluetooth устройства, которые уже спарены с телефоном.
  2. Организуем поиск новых устройств.
  3. Далее, по нажатию на устройство в списке, сделаем спаривание с этим устройством ( конечно же не для того, что бы появились маленькие Bluetooth –ики,  этого требует протокол работы bluetooth)
  4. Создадим класс для подключение устройств друг с другом по протоколу 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 с действием на включение блютуза. Так же нам надо проверить есть ли разрешение на работу с блютуз в манифесте.  Результатом работы кода будет следующий рисунок.

android studio bluetooth on

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 pair

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();

Результат работы кода будет представлен на картинке ниже.

Bluetooth scan

Внимание! Данный программный код представлен из реально работающей программы. Описывал все так как понял сам, читая открытые источники. К сожалению я не являюсь программистом Android,  по этому говорю честно, данную задачу можно реализовать красивым и правильным кодом. В этой статье описан просто рабочий код и принцип работы с Bluetooth в android studio на языке java.

5 2 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Андрей
Андрей
2 месяцев назад

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