Ответ
Да, работал с различными смежными устройствами через Bluetooth, NFC и Wi-Fi Direct. Например, подключал смартфоны к фитнес-трекерам через Bluetooth Low Energy (BLE), передавал данные между устройствами через NFC или реализовывал обмен файлами через Wi-Fi Direct.
Пример с BLE:
val gattCallback = object : BluetoothGattCallback() {
override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
gatt.discoverServices()
}
}
override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) {
val service = gatt.getService(UUID.fromString("..."))
val characteristic = service.getCharacteristic(UUID.fromString("..."))
gatt.readCharacteristic(characteristic)
}
}
Также есть опыт работы с USB-устройствами через UsbManager и кастомными протоколами.
Ответ 18+ 🔞
Э, слушай, а я с этими штуками работал — там, где они друг с другом по воздуху болтают. Bluetooth, NFC, Wi-Fi Direct — вся эта ебушки-воробушки. Вот, например, телефон к умным часам прикручивал через BLE, это который энергопотребление низкое. Или через NFC два девайса стукаешь — и данные перелетели, магия, блядь. А через Wi-Fi Direct файлы гонял — тоже прикольно, работает.
Вот, смотри, как с BLE обычно возишься (код не трогаю, он святой):
val gattCallback = object : BluetoothGattCallback() {
override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
gatt.discoverServices()
}
}
override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) {
val service = gatt.getService(UUID.fromString("..."))
val characteristic = service.getCharacteristic(UUID.fromString("..."))
gatt.readCharacteristic(characteristic)
}
}
А ещё, ёпта, через USB с железом общался — UsbManager в помощь. Там свои протоколы, порой хитрая жопа, но если вникнуть — ничего, живём. В общем, доверия ебать ноль к этим соединениям, но когда работает — красота.