Работа с Bluetooth в Android приложении
НАВИГАЦИЯ ПО СТРАНИЦЕ
Для работы с 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 для обмена данными между устройствами. Реализация обмена данными зависит от ваших конкретных потребностей.
Обратите внимание, что эти коды предназначены для обучения и могут требовать дополнительной обработки ошибок, а также улучшений в зависимости от вашего конкретного случая использования.