Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.64 KB | None | 0 0
  1. class BluetoothHelper @Inject constructor(private val context: Context) {
  2.  
  3.     private val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
  4.  
  5.     fun enable(): Boolean = bluetoothAdapter.enable()
  6.  
  7.     suspend fun findDeviceAddressByNameAsync(nameRegex: Regex): String? {
  8.         val device =
  9.             searchBondedDevice(nameRegex) ?: withTimeoutOrNull(6000L) { discoveryDevice(nameRegex) }
  10.  
  11.         return device?.address
  12.     }
  13.  
  14.     private fun searchBondedDevice(nameRegex: Regex): BluetoothDevice? =
  15.         bluetoothAdapter
  16.             .bondedDevices
  17.             .find { it.name.matches(nameRegex) }
  18.  
  19.     private suspend fun discoveryDevice(nameRegex: Regex) = callbackFlow {
  20.         val discoveryResultReceiver = object : BroadcastReceiver() {
  21.             override fun onReceive(context: Context, intent: Intent) {
  22.                 if (intent.action == BluetoothDevice.ACTION_FOUND) {
  23.  
  24.                     val device: BluetoothDevice =
  25.                         intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE) ?: return
  26.  
  27.                     if (!isClosedForSend && device.name?.matches(nameRegex) == true) {
  28.                         offer(device)
  29.                         close()
  30.                     }
  31.                 }
  32.             }
  33.         }
  34.  
  35.         context.registerReceiver(
  36.             discoveryResultReceiver,
  37.             IntentFilter(BluetoothDevice.ACTION_FOUND)
  38.         )
  39.  
  40.         bluetoothAdapter.startDiscovery()
  41.  
  42.         awaitClose {
  43.             context.unregisterReceiver(discoveryResultReceiver)
  44.             bluetoothAdapter.cancelDiscovery()
  45.         }
  46.     }.catch { Timber.d(it) }
  47.         .first()
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement