Работа с Bluetooth в Android приложении

НАВИГАЦИЯ ПО СТРАНИЦЕ

Bluetooth Запрос разрешений Активация Bluetooth Поиск устройств Bluetooth Обмен данными

Для работы с Bluetooth в Android-приложении необходимо выполнить ряд шагов, таких как запрос разрешений, обнаружение и подключение к устройствам Bluetooth, а также обмен данными. Давайте рассмотрим пример простого Android-приложения, которое подключается к устройству Bluetooth и обменивается данными.

Подключение к устройствам Bluetooth:

  • Запрос разрешений в манифесте:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
  • Активация Bluetooth:

import android.bluetooth.BluetoothAdapter
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    private val bluetoothAdapter: BluetoothAdapter? by lazy {
        BluetoothAdapter.getDefaultAdapter()
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Проверка поддержки Bluetooth на устройстве
        if (bluetoothAdapter == null) {
            Toast.makeText(this, "Bluetooth не поддерживается на этом устройстве", Toast.LENGTH_SHORT).show()
            finish()
            return
        }

        // Включение Bluetooth, если выключен
        if (!bluetoothAdapter!!.isEnabled) {
            val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
        } else {
            // Bluetooth уже включен
            // Реализация дальнейших действий
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_ENABLE_BT) {
            if (resultCode == RESULT_OK) {
                // Bluetooth включен успешно
                // Реализация дальнейших действий
            } else {
                Toast.makeText(this, "Включение Bluetooth отменено", Toast.LENGTH_SHORT).show()
                finish()
            }
        }
    }

    companion object {
        private const val REQUEST_ENABLE_BT = 1
    }
}
  • Поиск устройств Bluetooth и подключение:

import android.bluetooth.BluetoothDevice
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import androidx.appcompat.app.AppCompatActivity

class DeviceDiscoveryActivity : AppCompatActivity() {

    private lateinit var listView: ListView
    private lateinit var bluetoothAdapter: BluetoothAdapter
    private lateinit var discoveredDevices: ArrayList<BluetoothDevice>

    private val receiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            when (intent?.action) {
                BluetoothDevice.ACTION_FOUND -> {
                    val device =
                        intent.getParcelableExtra<BluetoothDevice>(BluetoothDevice.EXTRA_DEVICE)
                    if (device != null && !discoveredDevices.contains(device)) {
                        discoveredDevices.add(device)
                        updateDeviceList()
                    }
                }
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_device_discovery)

        listView = findViewById(R.id.listView)
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
        discoveredDevices = ArrayList()

        // Регистрация BroadcastReceiver для обнаружения устройств Bluetooth
        val filter = IntentFilter(BluetoothDevice.ACTION_FOUND)
        registerReceiver(receiver, filter)

        // Начать поиск устройств
        startDiscovery()
    }

    private fun startDiscovery() {
        // Проверка, что Bluetooth включен
        if (bluetoothAdapter.isEnabled) {
            // Очистка списка и начало поиска
            discoveredDevices.clear()
            updateDeviceList()

            // Запуск поиска устройств
            bluetoothAdapter.startDiscovery()
        } else {
            // Bluetooth выключен, выполните соответствующие действия (включение Bluetooth и т. д.)
        }
    }

    private fun updateDeviceList() {
        val deviceNames = discoveredDevices.map { it.name ?: "Unknown" }.toTypedArray()
        val adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, deviceNames)
        listView.adapter = adapter

        // Обработка выбора устройства из списка
        listView.setOnItemClickListener { _, _, position, _ ->
            val selectedDevice = discoveredDevices[position]

            // Подключение к выбранному устройству
            // Реализация дальнейших действий
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        // Остановка поиска при уничтожении активности
        bluetoothAdapter.cancelDiscovery()
        // Отмена регистрации BroadcastReceiver
        unregisterReceiver(receiver)
    }
}

Обмен данными через Bluetooth:

После подключения к устройству Bluetooth, вы можете использовать BluetoothSocket для обмена данными между устройствами. Реализация обмена данными зависит от ваших конкретных потребностей.

Обратите внимание, что эти коды предназначены для обучения и могут требовать дополнительной обработки ошибок, а также улучшений в зависимости от вашего конкретного случая использования.