Sobes.tech
Middle

Co je to PendingIntent?

sobes.tech AI

Odpověď od AI

PendingIntent je token, který umožňuje jiné aplikaci spustit část kódu jménem vaší aplikace s vašimi oprávněními.

Používá se pro:

  • Oznámení (spuštění aktivity po kliknutí na oznámení).
  • Widgety na ploše (zpracování kliknutí uživatele).
  • Plánované služby (opakované úkoly s AlarmManager).

Hlavní rozdíly oproti běžnému Intent:

  • PendingIntent je předáván jiné aplikaci.
  • PendingIntent zachovává oprávnění původní aplikace.

Typy PendingIntent:

  • getActivity(): pro spuštění Activity.
    // Vytvoření PendingIntent pro spuštění Activity
    val intent = Intent(context, TargetActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    
  • getService(): pro spuštění Service.
    // Vytvoření PendingIntent pro spuštění Service
    val intent = Intent(context, MyService::class.java)
    val pendingIntent = PendingIntent.getService(context, 0, intent, 0)
    
  • getBroadcast(): pro odeslání broadcast zprávy.
    // Vytvoření PendingIntent pro odeslání Broadcast
    val intent = Intent("MY_ACTION")
    val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
    

Příznaky PendingIntent ovlivňují chování:

Znak Popis
FLAG_ONE_SHOT PendingIntent lze použít pouze jednou.
FLAG_NO_CREATE Pokud PendingIntent neexistuje, nevytvářejte jej, vraťte null.
FLAG_CANCEL_CURRENT Pokud již existuje PendingIntent se stejným Intentem, zrušte jej a vytvořte nový.
FLAG_UPDATE_CURRENT Pokud již existuje PendingIntent se stejným Intentem, aktualizujte jeho Extra.
FLAG_IMMUTABLE PendingIntent nemůže být změněn jinými aplikacemi (doporučeno).

Při používání PendingIntent je důležité uvést jedinečné kódy požadavků (druhý argument v metodách getActivity, getService, getBroadcast), aby bylo možné je odlišit.