Sobes.tech
Middle

Какво е PendingIntent?

sobes.tech AI

Отговор от AI

PendingIntent е токен, който предоставя на друго приложение възможността да изпълни част от кода от името на вашето приложение с вашите разрешения.

Той се използва за:

  • Известия (стартиране на активност при натискане върху известие).
  • Уиджети на работния плот (обработка на кликванията на потребителя).
  • Планови услуги (повтарящи се задачи с AlarmManager).

Основните разлики спрямо обикновен Intent:

  • PendingIntent се предава на друго приложение.
  • PendingIntent запазва разрешенията на оригиналното приложение.

Типове PendingIntent:

  • getActivity(): за стартиране на Activity.
    // Създаване на PendingIntent за стартиране на Activity
    val intent = Intent(context, TargetActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    
  • getService(): за стартиране на Service.
    // Създаване на PendingIntent за стартиране на Service
    val intent = Intent(context, MyService::class.java)
    val pendingIntent = PendingIntent.getService(context, 0, intent, 0)
    
  • getBroadcast(): за изпращане на широковещателно съобщение.
    // Създаване на PendingIntent за изпращане на Broadcast
    val intent = Intent("MY_ACTION")
    val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
    

Флаговете на PendingIntent влияят на поведението:

Флаг Описание
FLAG_ONE_SHOT PendingIntent може да се използва само веднъж.
FLAG_NO_CREATE Ако PendingIntent не съществува, не го създавайте, връщайте null.
FLAG_CANCEL_CURRENT Ако вече съществува PendingIntent с същия Intent, отменете го и създайте нов.
FLAG_UPDATE_CURRENT Ако вече съществува PendingIntent с същия Intent, актуализирайте Extra-ите му.
FLAG_IMMUTABLE PendingIntent не може да бъде променян от други приложения (препоръчително).

При използване на PendingIntent е важно да посочите уникални кодове за заявки (вторият аргумент в методите getActivity, getService, getBroadcast), за да ги различавате.