Sobes.tech
Junior

Saját broadcast üzenetet lehet küldeni?

sobes.tech MI

Válasz az MI-től

Igen, ez lehetséges.

A sendBroadcast() módszert használjuk.

// Egy Intent létrehozása a broadcast-hoz
val intent = Intent("com.example.MY_CUSTOM_ACTION")

// További adatok hozzáadása az Intenthez (nem kötelező)
intent.putExtra("data_key", "some_value")

// Broadcast küldése
sendBroadcast(intent)

Azt, hogy ezt az üzenetet megkapja, regisztrálnia kell egy BroadcastReceiver-t.

A regisztráció lehet statikus (a Manifestben) vagy dinamikus (kódban registerReceiver segítségével).

Dinamikus regisztráció példája:

// Egy szűrő létrehozása a broadcast-hoz
val filter = IntentFilter("com.example.MY_CUSTOM_ACTION")

// Egy BroadcastReceiver létrehozása
val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        // A kapott üzenet feldolgozása
        val receivedData = intent?.getStringExtra("data_key")
        Log.d("BroadcastReceiver", "Egyedi broadcast fogadva adatokkal: $receivedData")
    }
}

// A BroadcastReceiver regisztrálása
registerReceiver(receiver, filter)

// Ne felejtsük el törölni a regisztrációt a komponens megsemmisítésekor
// unregisterReceiver(receiver)

Fontos figyelembe venni a következőket:

  • Explicit broadcast üzenetek: Android 8.0 (API szint 26) és felette korlátozásokat vezetett be a nem explicit broadcast üzenetekre a források erőforrás-hatékonyságának növelése érdekében. Az ilyen üzenetek küldéséhez az újabb Android verziókban gyakran meg kell adni a címzett csomagját (explicit broadcast).
    val intent = Intent("com.example.MY_CUSTOM_ACTION")
    // A címzett csomag megadása (ha ismert)
    intent.setPackage("com.example.receiverapp")
    sendBroadcast(intent)
    
  • Engedélyek: Bizonyos védett broadcast üzenetek küldéséhez és fogadásához megfelelő engedélyek szükségesek (pl. android.permission.SEND_SMS).
  • Helyi broadcast üzenetek: Csak egy alkalmazáson belüli üzenetküldéshez ajánlott a LocalBroadcastManager használata (most már elavult, helyette más módszerek, például Flow vagy RxJava ajánlott), amely hatékonyabb és biztonságosabb.
    // Helyi broadcast küldése
    val localIntent = Intent("com.example.MY_LOCAL_ACTION")
    LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent)
    
    // Helyi BroadcastReceiver regisztrálása
    val localReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            // Feldolgozás
        }
    }
    LocalBroadcastManager.getInstance(this).registerReceiver(localReceiver, IntentFilter("com.example.MY_LOCAL_ACTION"))
    
    // Regisztráció megszüntetése
    // LocalBroadcastManager.getInstance(this).unregisterReceiver(localReceiver)