Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
android_bluetooth [2026/01/24 14:06] enric_mieza_sanchez [Layout Dialog] |
android_bluetooth [2026/01/25 19:33] (actual) enric_mieza_sanchez [Us del Dialog a Activity o Fragment] |
||
|---|---|---|---|
| Línia 1: | Línia 1: | ||
| ====== Android i Bluetooth ====== | ====== Android i Bluetooth ====== | ||
| + | |||
| + | El tema de Bluetooth és ample i complex. En aquest article abordarem el codi necessari per: | ||
| + | * Gestionar els **permisos per a comunicació Bluetooth**. | ||
| + | * Llistar i triar entre els **dispositius aparellats** al sistema operatiu. | ||
| + | * Utilitzar **GATT per a recepció de dades** entre dispositius BLE o Bluetooth Low Emission. | ||
| {{ android-bluetooth.jpg? | {{ android-bluetooth.jpg? | ||
| - | Per aproximar-nos al tema dels dispositius Bluetooth podem seguir 2 estratègies diferents: | + | Altres temes pendents d' |
| + | * Escaneig de dispositius. | ||
| + | * GATT per a la transmissió de dades. | ||
| - | * Escanejar els dispositius des de la nostra app. El codi és més feixuc. | + | <WRAP tip> |
| - | * Llista i triar entre els dispositius | + | La pràctica |
| + | </ | ||
| {{tag> #Dam #DamMp08 #DamMp08Uf2 # | {{tag> #Dam #DamMp08 #DamMp08Uf2 # | ||
| Línia 17: | Línia 25: | ||
| <code kotlin> | <code kotlin> | ||
| + | @SuppressLint(" | ||
| fun updatePairedDevices() { | fun updatePairedDevices() { | ||
| // empty list | // empty list | ||
| Línia 22: | Línia 31: | ||
| // update list | // update list | ||
| - | val bluetoothAdapter | + | val bluetoothManager |
| + | val bluetoothAdapter = bluetoothManager.adapter | ||
| for( elem in bluetoothAdapter.bondedDevices.filter { device -> | for( elem in bluetoothAdapter.bondedDevices.filter { device -> | ||
| // Filtrar per dispositius BLE | // Filtrar per dispositius BLE | ||
| Línia 105: | Línia 115: | ||
| </ | </ | ||
| + | \\ | ||
| - | ===== Rebre fotos amb BLE GATT ===== | + | ===== Rebre fotos amb BLE GATT : BLEconnDialog |
| Per la comunicació de dades (sèrie) es sol utilitzar el **Bluetooth GATT o Generic Attribute Profile**. GATT és un protocol de serveis i característiques que defineix com s' | Per la comunicació de dades (sèrie) es sol utilitzar el **Bluetooth GATT o Generic Attribute Profile**. GATT és un protocol de serveis i característiques que defineix com s' | ||
| Línia 116: | Línia 127: | ||
| * **Descriptor**: | * **Descriptor**: | ||
| - | Us presento un codi per recepció de dades BLE encapsulat dins un '' | + | Us presento un codi per recepció de dades BLE encapsulat dins un '' |
| + | |||
| + | El '' | ||
| \\ | \\ | ||
| Línia 199: | Línia 212: | ||
| \\ | \\ | ||
| - | ==== Dialog | + | ==== BLEconnDialog |
| <file kotlin BLEconnDialog.kt> | <file kotlin BLEconnDialog.kt> | ||
| - | |||
| class BLEconnDialog( | class BLEconnDialog( | ||
| context: Context, | context: Context, | ||
| Línia 691: | Línia 703: | ||
| ==== Us del Dialog a Activity o Fragment ==== | ==== Us del Dialog a Activity o Fragment ==== | ||
| + | |||
| + | Per utilitzar el '' | ||
| + | |||
| + | <code kotlin> | ||
| + | class MainActivity : AppCompatActivity(), | ||
| + | // El codi de MainActivity aquí... | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | I hi implementarem les // | ||
| + | |||
| + | Quan volguem mostrar el '' | ||
| + | |||
| + | <code kotlin> | ||
| + | // DIALOG : cridar aquesta funció per mostrar-lo | ||
| + | //////////////////////////////////////////////// | ||
| + | private fun showBLEDialog(device: | ||
| + | bleDialog = BLEconnDialog(this, | ||
| + | bleDialog? | ||
| + | setCancelable(false) | ||
| + | setOnCancelListener { | ||
| + | onConnectionCancelled() | ||
| + | } | ||
| + | show() | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // DIALOG CALLBACKS | ||
| + | /////////////////////////////// | ||
| + | override fun onConnectionSuccess(gatt: | ||
| + | runOnUiThread { | ||
| + | Toast.makeText(this, | ||
| + | // Aquí pots fer operacions amb el gatt connectat | ||
| + | // Per exemple: llegir/ | ||
| + | } | ||
| + | } | ||
| + | |||
| + | override fun onConnectionFailed(error: | ||
| + | runOnUiThread { | ||
| + | Toast.makeText(this, | ||
| + | } | ||
| + | } | ||
| + | |||
| + | override fun onConnectionCancelled() { | ||
| + | runOnUiThread { | ||
| + | Toast.makeText(this, | ||
| + | } | ||
| + | } | ||
| + | |||
| + | override fun onReceivedImage(file: | ||
| + | runOnUiThread { | ||
| + | val filename = file.name | ||
| + | Toast.makeText(this, | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Aquesta callback és de l' | ||
| + | override fun onDestroy() { | ||
| + | super.onDestroy() | ||
| + | bleDialog? | ||
| + | } | ||
| + | </ | ||
| \\ | \\ | ||
| + | ===== Transmissió de dades per BLE ===== | ||
| + | |||
| + | <WRAP tip> | ||
| + | La pràctica que s' | ||
| + | </ | ||
| + | |||
| + | \\ | ||