Что такое Android PendingIntent?

Я новичок в Android. Я прочитал документацию Android, но мне все еще нужно больше разъяснений. Может кто-нибудь сказать мне, что именно PendingIntent - Это?

18 ответов


A PendingIntent - это токен, который вы даете иностранному приложению (например,NotificationManager, AlarmManager, Дом , или другие сторонние приложения), которые позволяет иностранному приложению использовать разрешения вашего приложения для выполнения предопределенного фрагмента кода.

если вы дадите иностранному приложению намерение, оно выполнит ваш Intent С его собственного разрешения. Но если вы дадите иностранному приложению PendingIntent, Это приложение выполнит ваш Intent использовать разрешение вашего приложения.


намерение

намерения являются стандартным механизмом обмена сообщениями в Android, который выражает намерение пользователя выполнить некоторую работу. Они позволяют взаимодействовать с другими компонентами, определенными вами или операционной системой Android.

пример:

  1. эфир
  2. запустить камеру
  3. запустить службу
  4. запуск действия
  5. дисплей a веб-страница или список контактов
  6. наберите номер телефона или ответьте на телефонный звонок

    они используются в обоих направлениях

1) вами вызвать компонент

2)системой, чтобы уведомить вас о каком-то событии.

логический рабочий процесс создания намерения обычно выглядит следующим образом:

  • создать намерение
  • b. Добавить параметры намерения -> Ex. какого рода намерения мы отправляете в ОС или любые атрибуты, связанные с этим намерением, такие как текстовая строка или что-то, передаваемое вместе с намерением
  • c. Запустите Intent

пример реальной жизни: Предположим, я просыпаюсь утром, и я"намерение


ожидающее намерение-это токен, который вы даете некоторому приложению для выполнения действия от имени ваших приложений независимо от того процесса приложения живых или нет.

Я думаю, что документация достаточно подробная: отложенные документы намерения.

просто подумайте о случаях использования для ожидающих намерений, таких как (широковещательные намерения, планирование сигналов тревоги), и документация станет более ясной и значимой.


В моем случае, ни один из вышеуказанных ответов, ни официальная документация google помог мне схватить концепцию PendingIntent класса.

и тогда я нашел это видео,Google I / O 2013,за синей точкой сессии. В этом видео экс-Гуглер Jaikumar Ганеш объясняет, что PendingIntent есть, и это было то, что дало мне общую картину этого.

ниже просто транскрипция выше видео (от 15:24).

Итак, что такое ожидающее намерение?

Это токен, который ваш процесс приложения даст процессу определения местоположения, и процесс местоположения будет использовать его, чтобы разбудить ваше приложение, когда событие происходит. Таким образом, это в основном означает, что ваше приложение в фоновом режиме не должно быть всегда запущено. Когда произойдет что-то интересное, мы разбудим вас. Это экономит много батарея.

это объяснение становится более ясным с этим фрагментом кода (который включен в слайд сеанса).

PendingIntent mIntent = PendingIntent.getService(...);

mLocationClient.requestLocationUpdates(locationRequest, mIntent);

public void onHandleIntent(Intent intent) {   
    String action = intent.getAction();   
    if (ACTION_LOCATION.equals(action)) {       
        Location location = intent.getParcelableExtra(...)   
    }
}

почему требуется PendingIntent ? Я думал как

  1. почему принимающее приложение само не может создать Intent или
  2. почему мы не можем использовать простой Intent для той же цели.

Э. Г.Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

если я посылаю bluetoothIntent в другое приложение, которое не имеет разрешения android.permission.BLUETOOTH_ADMIN, что принимающее приложение не может включить Bluetooth с startActivity(bluetoothIntent).

в ограничение преодолевается с помощью PendingIntent. С PendingIntent принимающее приложение, не нужно android.permission.BLUETOOTH_ADMIN включить Bluetooth. источник.


ожидающее намерение-это намерение, которое начнется в какой-то момент в будущем. Нормальное намерение начинается немедленно, когда оно передается startActivity(Intent) или StartService(Intent).


будущее намерение, которое могут использовать другие приложения.
И вот пример для создания:

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);

АНАЛОГИЯ ТАКСИ

намерение

намерения обычно используются для запуска служб. Например:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
startService(intent);

это как когда вы вызываете такси:

Myself = CurrentClass
Taxi Driver = ServiceClass

В Ожидании Намерениях

вы должны использовать что-то вроде этого:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
PendingIntent pi = PendingIntent.getService(parameter, parameter, intent, parameter);
getDataFromThirdParty(parameter, parameter, pi, parameter);

теперь эта третья сторона начнет службу, действующую от вашего имени. Аналогия реальной жизни-Uber или Lyft, которые оба такси компании.

вы отправляете запрос на поездку в Uber / Lyft. Затем они пойдут вперед и позвонят одному из своих водителей от вашего имени.

таким образом:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass

PendingIntent-это маркер, который вы даете другому приложению (например, диспетчеру уведомлений, менеджеру сигнализации или другим сторонним приложениям), который позволяет этому другому приложению использовать разрешения вашего приложения для выполнения предопределенного фрагмента кода. Чтобы выполнить трансляцию через ожидающее намерение, получите PendingIntent через PendingIntent.getBroadcast(). Чтобы выполнить действие через ожидающее намерение, вы получаете действие через PendingIntent.getActivity().


Что такое намерение?

намерение-это конкретная команда в Android, которая позволяет отправить команду в ОС Android, чтобы сделать что-то конкретное. Думайте об этом как о действии, которое должно произойти. Есть много действий, которые можно сделать, например, отправить электронное письмо или прикрепить фотографию к электронной почте или даже запустить приложение. Логический рабочий процесс создания намерения обычно выглядит следующим образом: a. Создать намерение b. Добавить параметры намерения - > Ex. какой вид умысла мы отправка в ОС или любые атрибуты, связанные с этим намерением, такие как текстовая строка или что-то передается вместе с намерением c. Запустите Intent

пример реальной жизни: Предположим, я просыпаюсь утром, и я "намерен" пойти в туалет. Сначала я подумаю о том, чтобы сходить в туалет, но это не приведет меня в туалет. Тогда мне придется сказать своему мозгу, чтобы он сначала встал с постели, потом пошел в туалет, а потом отпустил, потом пошел и вымыл руки., тогда иди и вытри мне руки. Как только я знаю, куда иду, я посылаю команду начать, и мое тело начинает действовать.

Что ожидает намерения?

продолжая из примера реальной жизни, Предположим, я хочу принять душ, но я хочу принять душ после того, как я почищу зубы и позавтракаю. Поэтому я знаю, что не буду принимать душ, по крайней мере, до 30-40 минут. У меня все еще в голове, что мне нужно подготовить одежду, а затем подняться по лестнице обратно в ванную, затем раздеться, а затем душ. Однако этого не произойдет до 30-40 минут. Теперь у меня есть намерение принять душ. Это до 30-40 минут.

Это в значительной степени разница между ожидающим намерением и обычным намерением. Регулярные намерения могут быть созданы без ожидающего намерения, однако для создания ожидающего намерения вам нужно сначала настроить регулярное намерение.


на простом языке,
1. Описание намерения и целевого действия для выполнения. Сначала вы должны создать намерение, а затем вы должны передать определенный класс java, который вы хотите выполнить, намерению.
2. Вы можете вызвать тот класс java, который является вашим классом действия класса, PendingIntent.getActivity, PendingIntent.getActivities (Context, int, Intent[], int), PendingIntent.getBroadcast (Context, int, Intent, int) и PendingIntent.getService (контекст, int, намерение, int); Здесь вы видите, что намерение, которое исходит из Шага 1
3. Вы должны иметь в виду that...By предоставляя PendingIntent другому приложению, вы предоставляете ему право выполнять указанную Вами операцию.

Это то, что я узнал после долгого чтения.


PendingIntent в основном объект, который обертывает другой


Как следует из названия .. PendingIntent

вы можете pend (сделать это через некоторое время). Он работает как другое намерение ..это способ дать вашу задачу какому-то другому приложению для выполнения от вашего имени.


PendingIntent обертывает общее намерение токеном, который вы даете иностранному приложению для выполнения с вашего разрешения. Например:

уведомление вашего музыкального приложения не может воспроизводить / приостанавливать музыку, если вы не дал PendingIntent для отправки трансляции, потому что ваше музыкальное приложение имеет READ_EXTERNAL_STORAGE разрешение, которое приложение уведомления нет. Уведомление-это системная служба (так что это иностранное приложение).


PendingIntent-это в основном объект, который обертывает другой объект намерения. Затем он может быть передан иностранному приложению, где вы предоставляете этому приложению право выполнять операцию, т. е. выполнять намерение, как если бы оно было выполнено из процесса вашего собственного приложения (то же разрешение и удостоверение). Предоставляя PendingIntent другому приложению, вы предоставляете ему право выполнять указанную Вами операцию, как если бы другое приложение было вами самим (с теми же разрешениями и идентичность.)


A В Ожидании Намерениях указывает действие, которое следует предпринять в будущем. Он позволяет передавать будущие намерения другому приложению и позволяет этому приложению выполнять эти намерения, как если бы у него были те же разрешения, что и у вашего приложения, независимо от того, существует ли ваше приложение, когда намерение в конечном итоге вызывается.

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

Если вы даете иностранному приложению намерение, и это приложение отправляет / передает намерение, которое вы дали, они будут выполнять намерение со своими собственными разрешениями. Но если вы вместо этого предоставите иностранному приложению ожидающее намерение, созданное с помощью вашего собственного разрешения, это приложение выполнит содержащееся намерение, используя разрешение вашего приложения.

для выполнения трансляции через ожидающее намерение, поэтому получите PendingIntent через PendingIntent.getBroadcast(). Чтобы выполнить действие через ожидающее намерение, вы получаете действие через PendingIntent.getActivity().

Это действие намерения, которое вы хотите выполнить, но позже. Подумайте о том, чтобы положить намерение на лед. Причина, по которой это необходимо, заключается в том, что намерение должно быть создано и запущено из допустимого контекста в вашем приложении, но есть определенные случаи, когда он недоступен в то время, когда вы хотите запустить действие, потому что вы технически вне контекста приложения (два распространенных примера запускают действие из уведомления или BroadcastReceiver.

создавая PendingIntent, который вы хотите использовать для запуска, скажем, действия, пока у вас есть контекст для этого (изнутри другого действия или службы), вы можете передать этот объект чему-то внешнему, чтобы он запустил часть вашего приложения от вашего имени.

A PendingIntent обеспечивает середины для применений работать, даже после их процесса выходит. Важно отметить, что даже после того, как приложение, создавшее PendingIntent, было убито, это намерение все еще может работать. Описание намерения и целевые действия для выполнения с ним. Экземпляры этого класса создаются с помощью getActivity(Context, int, Intent, int), getBroadcast (Context, int, Intent, int), getService (Context, int, Intent, int); возвращаемый объект может быть передан другим приложениям, чтобы они могли выполнить действие, описанное на вашем имя в более позднее время.

предоставляя PendingIntent другому приложению, вы предоставляете ему право выполнять указанную Вами операцию, как если бы другое приложение было вами самим (с теми же разрешениями и удостоверением). Таким образом, вы должны быть осторожны с тем, как вы создаете PendingIntent: часто, например, базовое намерение, которое вы предоставляете, будет иметь имя компонента, явно установленное на один из ваших собственных компонентов, чтобы гарантировать, что он в конечном итоге отправлен туда и никуда еще.

сам PendingIntent-это просто ссылка на токен, поддерживаемый системой, описывающей исходные данные, используемые для его извлечения. Это означает, что, даже если процесс его приложения-владельца будет убит, сам PendingIntent останется пригодным для использования из других процессов, которые были даны ему. Если создающее приложение позже повторно извлекает тот же тип PendingIntent (ту же операцию, то же действие намерения, данные, категории и компоненты, и те же флаги), оно получит PendingIntent, представляющий тот же токен, если он все еще действителен, и поэтому может вызвать cancel (), чтобы удалить его.


ожидающее намерение-это намерение, которое предоставляет все разрешения другому приложению для выполнения определенных работ. Когда основное действие уничтожается, Android OS забирает у него разрешение.


PendingIntent-это оболочка намерения. Иностранное приложение, которое получает PendingIntent, не знает содержание намерения, которое обернуто PendingIntent. Миссия иностранного приложения состоит в том, чтобы отправить намерение владельцу, когда некоторые условия выполнены (например: тревога с расписанием или уведомление с щелчком мыши...). Условия задаются владельцем, но обрабатываются иностранным приложением (например: alarm, notification).

Если иностранное приложение отправило намерение вашему приложению, означает, что иностранное приложение знает о содержании намерения. и иностранное приложение принять решение отправить намерение, то ваше приложение должно обрабатывать намерение удовлетворить некоторые условия ваше приложение получить ресурс производительности системы.