Что такое Android PendingIntent?

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

+410
источник поделиться
18 ответов

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

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

+710
источник

INTENT

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

Пример трансляции

  • сообщение
  • Запустите камеру
  • Запустите службу
  • Запустить действие
  • Отображение веб-страницы или списка контактов
  • Наберите номер телефона или ответьте на телефонный звонок

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

1), чтобы вызвать компонент

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

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

  • Создать намерение
  • б. Добавить параметры намерения- > Пример. какой тип намерения мы отправляем в ОС или какие-либо атрибуты, связанные с этим намерением, такие как текстовая строка или что-то, что передается вместе с намерением.
  • с. RUN the Intent

Пример реальной жизни: скажем, я просыпаюсь утром, и я " НАЧАТЬ", чтобы пойти в уборную. Сначала мне нужно ДУМАТЬ о том, чтобы пойти в уборную, но это НЕ ДОЛЖНО достать меня в туалет. Затем я должен сказать своему мозгу, чтобы сначала встать с постели, затем пойти в уборную, а затем отпустить, затем пойти и вымыть руки, затем пойти и вытереть руки. Когда я узнаю, куда я иду, я отправлю команду, чтобы начать, и мое тело принимает меры.

PENDINGINTENT

A PendingIntent указывает действие, которое необходимо предпринять в будущем. Он позволяет передать будущее намерение другому приложению и позволить этому приложению выполнять этот намерение, как если бы он имел same permissions as your application, независимо от того, находится ли ваше приложение по-прежнему, когда в конечном итоге вызывается намерение. Это токен, который вы даете внешняя заявка, которая позволяет иностранной заявке использовать разрешения ваших приложений для выполнения предопределенного фрагмента кода.

Предоставляя PendingIntent другому приложению, вы предоставляете ему право выполнить указанную операцию, как если бы это было другое приложение (с теми же правами и удостоверениями). Таким образом, you should be careful about how you build the PendingIntent: часто, например, базовый Intent, который вы поставляете, будет иметь имя компонента, явно установленное на один из ваших собственных компонентов, чтобы гарантировать, что он в конечном итоге отправлен туда и нигде больше.

Это действие Intent, которое вы хотите выполнить, но позже. Подумайте об этом, намереваясь положить на Намерение. Причина, по которой это необходимо, заключается в том, что Intent должен быть создан и запущен из действительного Context в вашем приложении, но есть определенные случаи, когда один из них недоступен в то время, когда вы хотите запустить действие, потому что вы технически вне контекста приложений (два общих примера запускают Activity from Notification или BroadcastReceiver. Создаем PendingIntent, который вы хотите использовать для запуска, скажем, Activity, пока у вас есть Context, чтобы сделать это (изнутри другого действия или служба)

Продолжая пример реальной жизни: скажем, я хочу принять душ, но я хочу принять душ ПОСЛЕ чистки зубов и завтрака. Поэтому я знаю, что не буду принимать душ до 30-40 минут. У меня все еще есть в голове, что мне нужно подготовить одежду, а затем подняться по лестнице обратно в ванную, затем раздеться, а затем принять душ. Однако этого не произойдет, пока не пройдет 30-40 минут. У меня теперь есть ОЖИДАНИЕ намерения принять душ. Он работает в течение 30-40 минут.

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

Регулярное намерение → DOES NOT REQUIRE PENDING INTENT TO BE MADE

Ожидающее намерение → REQUIRES A REGULAR INTENT TO BE CREATED

Задания имеют два типа: Явные и Неявные

Явное намерение. Когда ваше приложение узнает, какой компонент вызывать для выполнения какого-либо действия

Неявное намерение. Когда ваше приложение не знает, какой компонент может точно выполнить требуемое действие. Для Ex. Если вы просто скажете, что хотите отобразить URL-адрес, система решает, какой компонент будет выполнять намерение.

Лучше и ясное представление о намерениях. Вист под ссылками

+203
источник
другие ответы

Связанные вопросы


Похожие вопросы

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

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

Просто подумайте о случаях использования для PI, таких как (Трансляция, планирование аварийных сигналов), и документация станет понятной и понятной.

+42
источник

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

И затем я нашел это видео, Google I/O 2013, за пределами сеанса Blue Dot. В этом видео ex-googler Jaikumar Ganesh объясняет, что такое 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(...)   
    }
}
+27
источник

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

  • Почему приложение-получатель не может создать Intent или
  • Почему мы не можем использовать простой Intent для этой же цели.

НАПРИМЕР Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

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

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

+16
источник

Ожидание намерения - это намерение, которое начнется позже. Нормальное намерение начинается в то время, когда оно передается в startActivity(intent) или StartService(intent).

+15
источник

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

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendIntent = PendingIntent.getActivity(context, 0, intent, 0);
+11
источник

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

+9
источник

TAXI ANALOGY

Намерение

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

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 ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass
+9
источник

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

Intent - это определенная команда на Android, которая позволяет вам отправить команду в ОС Android, чтобы сделать что-то конкретное. Подумайте об этом как о действии, которое должно произойти. Существует множество действий, которые можно выполнить, например, отправка электронной почты или прикрепление фотографии к электронной почте или даже запуск приложения. Логический процесс создания намерения обычно выглядит следующим образом: а. Создать намерение б. Добавить варианты настройки → Пример. какой тип намерения мы отправляем в ОС или какие-либо атрибуты, связанные с этим намерением, такие как текстовая строка или что-то, что передается вместе с намерением с. RUN the Intent

Пример реальной жизни: позвольте сказать, что я просыпаюсь утром, и я "НАСТОЯЩИЙ", чтобы пойти в уборную. Сначала мне нужно ДУМАТЬ о том, чтобы пойти в уборную, но это НЕ ДОЛЖНО достать меня в туалет. Затем я должен сказать своему мозгу, чтобы сначала встать с постели, затем пойти в уборную, а затем отпустить, затем пойти и вымыть руки, затем пойти и вытереть руки. Когда я узнаю, куда я иду, я отправлю команду, чтобы начать, и мое тело принимает меры.

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

Продолжая пример реальной жизни, позвольте сказать, что я хочу принять душ, но я хочу принять душ ПОСЛЕ чистки зубов и завтрака. Поэтому я знаю, что не буду принимать душ до 30-40 минут. У меня все еще есть в голове, что мне нужно подготовить одежду, а затем подняться по лестнице обратно в ванную, затем раздеться, а затем принять душ. Однако этого не произойдет, пока не пройдет 30-40 минут. У меня теперь есть ОЖИДАНИЕ намерения принять душ. Он работает в течение 30-40 минут.

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

+7
источник

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

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

+4
источник

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

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

+1
источник

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

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

+1
источник

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

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

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

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

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

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

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

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

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

0
источник

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

0
источник

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

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

0
источник

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

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);
0
источник

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

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос