Sobes.tech
Middle

Ce este PendingIntent?

sobes.tech AI

Răspuns de la AI

PendingIntent reprezintă un token care oferă unei alte aplicații posibilitatea de a executa o parte din cod în numele aplicației dvs. cu permisiunile dvs.

Este utilizat pentru:

  • Notificări (pornirea unei activități la clic pe notificare).
  • Widget-uri desktop (procesarea clicurilor utilizatorului).
  • Servicii de planificare (sarcini recurente cu AlarmManager).

Principalele diferențe față de un Intent obișnuit:

  • PendingIntent este transmis către o altă aplicație.
  • PendingIntent păstrează permisiunile aplicației originale.

Tipuri de PendingIntent:

  • getActivity(): pentru a porni o Activity.
    // Crearea unui PendingIntent pentru a porni o Activity
    val intent = Intent(context, TargetActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    
  • getService(): pentru a porni un Service.
    // Crearea unui PendingIntent pentru a porni un Service
    val intent = Intent(context, MyService::class.java)
    val pendingIntent = PendingIntent.getService(context, 0, intent, 0)
    
  • getBroadcast(): pentru a trimite un mesaj broadcast.
    // Crearea unui PendingIntent pentru a trimite un Broadcast
    val intent = Intent("MY_ACTION")
    val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
    

Flag-urile PendingIntent influențează comportamentul:

Flag Descriere
FLAG_ONE_SHOT PendingIntent poate fi utilizat o singură dată.
FLAG_NO_CREATE Dacă PendingIntent nu există, nu îl crea, returnează null.
FLAG_CANCEL_CURRENT Dacă există deja un PendingIntent cu același Intent, îl anulează și creează unul nou.
FLAG_UPDATE_CURRENT Dacă există deja un PendingIntent cu același Intent, actualizează Extras-urile sale.
FLAG_IMMUTABLE PendingIntent nu poate fi modificat de alte aplicații (recomandat).

Atunci când utilizați PendingIntent, este important să specificați coduri de solicitare unice (al doilea argument în metodele getActivity, getService, getBroadcast) pentru a le diferenția.