bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


android_ble

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

android_ble [2026/01/10 16:26]
enric_mieza_sanchez creat
android_ble [2026/01/10 16:37] (actual)
enric_mieza_sanchez
Línia 1: Línia 1:
-====== Android i BLE (Bluetooth Low Emission) ====== +~~GOTO>android_bluetooth~~
- +
-{{ android-bluetooth.jpg?400 }} +
- +
-En el cas del BLE podriem optar per 2 estratègies diferents: +
- +
-  * Escanejar els dispositius des de la nostra app. +
-  * Llista i triar entre els dispositius que han estat aparellats al sistema operatiu. +
- +
- +
- +
-===== Llistar els dispositius emparellats ===== +
- +
-Obtenir aquesta llista és senzill accedint ''BluetoothAdapter.bondedDevices'': +
- +
-<code kotlin> +
-fun updatePairedDevices() { +
-    // empty list +
-    dataset.clear() +
- +
-    // update list +
-    val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() +
-    for( elem in bluetoothAdapter.bondedDevices.filter { device -> +
-        // Filtrar per dispositius BLE +
-        device.type == BluetoothDevice.DEVICE_TYPE_LE || +
-                device.type == BluetoothDevice.DEVICE_TYPE_DUAL || +
-                device.type == BluetoothDevice.DEVICE_TYPE_UNKNOWN +
-    } ) { +
-        // afegim element al dataset +
-        dataset.add( elem ) +
-    } +
-+
-</code> +
- +
-\\ +
- +
-===== Gestió de permisos ===== +
- +
-La gestió de permisos del Bluetooth és una part més engorrosa. +
- +
-Primer de tot, declarar els permisos estàtics a ''AndroidManifest.xml'': +
- +
-<code xml> +
-<uses-permission android:name="android.permission.BLUETOOTH" /> +
-<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> +
-<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> +
- +
-<!-- Per a Android 12 o superior --> +
-<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> +
-<uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> +
-</code> +
- +
- +
-Seguidament, necessitarem al nostre codi demanar els permisos dinàmics. Abans de cridar a la funció ''updatePairedDevices()'' ja vista abans, haurem de fer una funció "wrapper" que abans s'asseguri que els permisos estan ben gestionats: +
- +
- +
-<code kotlin> +
-private fun requestBluetoothPermissionAndUpdate() { +
-    val permission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { +
-        // Android 12+ requereix BLUETOOTH_CONNECT +
-        Manifest.permission.BLUETOOTH_CONNECT +
-    } else { +
-        // Versions anteriors +
-        Manifest.permission.BLUETOOTH +
-    } +
- +
-    if (ContextCompat.checkSelfPermission(this, permission) != +
-        PackageManager.PERMISSION_GRANTED) { +
- +
-        // Demanar el permís +
-        ActivityCompat.requestPermissions( +
-            this, +
-            arrayOf(permission), +
-            REQUEST_CODE_BLUETOOTH +
-        ) +
-    } else { +
-        // Permís ja concedit - llegir dispositius +
-        updatePairedDevices() +
-    } +
-+
- +
-override fun onRequestPermissionsResult( +
-    requestCode: Int, +
-    permissions: Array<out String>, +
-    grantResults: IntArray +
-) { +
-    super.onRequestPermissionsResult(requestCode, permissions, grantResults) +
- +
-    if (requestCode == REQUEST_CODE_BLUETOOTH) { +
-        if (grantResults.isNotEmpty() && grantResults[0] == +
-            PackageManager.PERMISSION_GRANTED) { +
-            // Permís concedit - llegir dispositius +
-            updatePairedDevices() +
-        } else { +
-            // Permís denegat +
-            Toast.makeText(this, "Permís necessari per a llegir Bluetooth", +
-                Toast.LENGTH_SHORT).show() +
-        } +
-    } +
-+
-</code>+
  
android_ble.txt · Darrera modificació: 2026/01/10 16:37 per enric_mieza_sanchez