Я новичок в Android. Я прочитал документацию по Android, но мне все еще нужны некоторые разъяснения. Может кто-нибудь сказать мне, что именно PendingIntent
?
538
Я новичок в Android. Я прочитал документацию по Android, но мне все еще нужны некоторые разъяснения. Может кто-нибудь сказать мне, что именно PendingIntent
?
A PendingIntent
- это токен, который вы даете стороннему приложению (например NotificationManager
, AlarmManager
домашнему экрану AppWidgetManager
или другим сторонним приложениям), который позволяет стороннему приложению использовать разрешения вашего приложения для выполнения предопределенного фрагмента кода .
Если вы дадите намерение иностранному приложению, оно будет исполнено Intent
с собственными разрешениями. Но если вы дадите иностранному заявлению a PendingIntent
, это приложение выполнит ваше, Intent
используя разрешение вашего приложения.
Pending Intent - это токен, который вы даете некоторым приложениям для выполнения действий от имени ваших приложений, независимо от того, активен ли ваш процесс приложения или нет.
Я думаю, что документация достаточно подробная: в ожидании документов по намерениям .
Только подумайте о сценариях использования для ожидающих целей, таких как (Broadcasting Intents, планирование аварийных сигналов), и документация станет более понятной и значимой.
источник
В моем случае ни один из приведенных выше ответов, ни официальная документация Google не помогли мне понять концепцию
PendingIntent
класса.А потом я нашел это видео, Google I / O 2013, за пределами сеанса Blue Dot . В этом видео бывший гуглер Джайкумар Ганеш объясняет, что
PendingIntent
есть, и именно это дало мне полную картину этого.Ниже приведена только транскрипция вышеприведенного видео ( с 15:24 ).
Это объяснение становится более понятным с помощью этого фрагмента кода (который включен в слайд сеанса).
источник
Почему 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. Источник .источник
Ожидающее намерение - это намерение, которое начнется в определенный момент в будущем. Нормальное намерение начинается немедленно, когда оно передается
startActivity(Intent)
илиStartService(Intent)
.источник
Будущее намерение, которое могут использовать другие приложения.
И вот пример для его создания:
источник
ТАКСИ АНАЛОГИЯ
умысел
Интенты обычно используются для запуска Сервисов. Например:
Это как при вызове такси:
В ожидании намерения
Вам нужно будет использовать что-то вроде этого:
Теперь эта третья сторона запустит службу, действующую от вашего имени. Настоящая аналогия в жизни - это Uber или Lyft, которые обе являются компаниями такси.
Вы отправляете заявку на поездку в Uber / Lyft. Затем они позовут одного из своих водителей от вашего имени.
Следовательно:
источник
PendingIntent - это токен, который вы даете другому приложению (например, Notification Manager, Alarm Manager или другим сторонним приложениям), который позволяет этому другому приложению использовать разрешения вашего приложения для выполнения предопределенного фрагмента кода. Чтобы выполнить трансляцию через ожидающее намерение, получите PendingIntent через PendingIntent.getBroadcast (). Чтобы выполнить действие через ожидающее намерение, вы получаете действие через PendingIntent.getActivity ().
источник
Что такое Намерение?
Намерение - это особая команда в Android, которая позволяет отправлять команду ОС Android для выполнения чего-то определенного. Думайте об этом как о действии, которое должно произойти. Существует много действий, таких как отправка электронного письма, прикрепление фотографии к электронному письму или даже запуск приложения. Логический рабочий процесс создания намерения обычно выглядит следующим образом: a. Создать намерение б. Добавить опции Intent -> Ex. какой тип намерения мы отправляем в ОС или какие-либо атрибуты, связанные с этим намерением, такие как текстовая строка или что-то переданное вместе с намерением c. ВЫПОЛНИТЬ Намерение
Пример из реальной жизни: допустим, я просыпаюсь утром и собираюсь пойти в туалет. Сначала я должен подумать о том, чтобы пойти в туалет, но на самом деле это не приводит меня в туалет. Затем мне придется сказать моему мозгу, чтобы он сначала встал с кровати, затем пошел в уборную, а затем отпустил, затем пошел и вымыл мои руки, затем пошел и вытер руки. Как только я знаю, куда я иду, я посылаю команду, и мое тело начинает действовать.
Что такое ожидающие намерения?
Продолжая пример из реальной жизни, скажем, я хочу принять душ, но хочу принять душ ПОСЛЕ того, как я чищу зубы и завтракаю. Так что я знаю, что не буду принимать душ, по крайней мере, до 30-40 минут. У меня все еще есть в голове, что мне нужно подготовить свою одежду, а затем пройти вверх по лестнице обратно в ванную, затем раздеться и затем принять душ. Однако этого не произойдет, пока не пройдет 30-40 минут. Теперь у меня есть намерение принять душ. В ожидании 30-40 минут.
Это в значительной степени разница между ожидающим намерением и обычным намерением. Обычные намерения могут быть созданы без ожидающих намерений, однако, чтобы создать ожидающие намерения, сначала необходимо настроить обычные намерения.
источник
PendingIntent
в основном объект, который оборачивает другойIntent
объект. Затем он может быть передан стороннему приложению, где вы предоставляете этому приложению право на выполнение операции, т.е. выполняете намерение, как если бы оно было выполнено из процесса вашего собственного приложения (то же самое разрешение и идентификация). По соображениям безопасности вы всегда должны передавать явные намерения PendingIntent, а не быть неявными.источник
Простым языком:
1. Описание намерения и целевого действия, которое нужно выполнить. Сначала вы должны создать намерение, а затем передать конкретный Java-класс, который вы хотите выполнить, в Intent.
2. Вы можете вызвать те классы Java, которые являются классом действий вашего класса, с помощью PendingIntent.getActivity, PendingIntent.getActivities (Context, int, Intent [], int), PendingIntent.getBroadcast (Context, int, Intent, int) и PendingIntent. getService (Context, int, Intent, int); Здесь вы видите тот Намерение, которое происходит из шага 1
3. Следует помнить, что ... Передав PendingIntent другому приложению, вы предоставляете ему право выполнять указанную вами операцию.
Это то, что я узнал после долгого чтения.
источник
PendingIntent оборачивает общее намерение токеном, который вы даете иностранному приложению для выполнения с вашего разрешения. Например:
источник
Как следует из названия .. PendingIntent
Вы можете ожидать (сделать это через некоторое время) это. Это работает как другое намерение .. это способ передать вашу задачу другому приложению для выполнения от вашего имени.
источник
Pending Намерение определяет действие , которое должно предпринять в будущем. Это позволяет передавать будущие намерения другому приложению и разрешать этому приложению выполнять это намерение, как если бы оно имело те же разрешения, что и ваше приложение, независимо от того, присутствует ли ваше приложение во время его вызова или нет.
Это маркер, который вы даете стороннему приложению, которое позволяет стороннему приложению использовать разрешения вашего приложения для выполнения предопределенного фрагмента кода.
Если вы даете иностранному приложению намерение, и это приложение отправляет / передает заданное вами намерение, оно выполнит намерение со своими собственными разрешениями. Но если вместо этого вы дадите иностранному приложению ожидающее намерение, которое вы создали, используя свое собственное разрешение, то это приложение выполнит содержащееся намерение, используя разрешение вашего приложения.
Чтобы выполнить трансляцию через ожидающее намерение, получите PendingIntent через PendingIntent.getBroadcast (). Чтобы выполнить действие через ожидающее намерение, вы получаете действие через PendingIntent.getActivity ().
Это намеренное действие, которое вы хотите выполнить, но позже. Подумайте о том, чтобы поставить Намерение на лед. Причина, по которой это необходимо, заключается в том, что намерение должно быть создано и запущено из допустимого контекста в вашем приложении, но в некоторых случаях оно недоступно в то время, когда вы хотите выполнить действие, поскольку технически вы находитесь вне контекста приложения ( два распространенных примера - запуск действия из уведомления или BroadcastReceiver.
Создав PendingIntent, который вы хотите использовать для запуска, скажем, Activity, когда у вас есть для этого Контекст (из другой Activity или Service), вы можете передать этот объект чему-то внешнему, чтобы он мог запустить часть вашего приложения. от вашего имени.
PendingIntent предоставляет средства для работы приложений даже после завершения их процесса. Важно отметить, что даже после того, как приложение, создавшее PendingIntent, было убито, это намерение все еще может работать. Описание намерения и целевого действия, которое нужно выполнить с ним. Экземпляры этого класса создаются с помощью getActivity (Context, int, Intent, int), getBroadcast (Context, int, Intent, int), getService (Context, int, Intent, int); возвращенный объект может быть передан другим приложениям, чтобы они могли выполнить действие, описанное вами от вашего имени, позже.
Передав PendingIntent другому приложению, вы предоставляете ему право выполнять указанную вами операцию, как если бы другое приложение было вами (с теми же разрешениями и идентификацией). Таким образом, вы должны быть осторожны с тем, как вы строите PendingIntent: часто, например, для базового Intent, который вы предоставляете, имя компонента будет явно установлено на один из ваших собственных компонентов, чтобы гарантировать, что оно в конечном итоге будет отправлено туда и никуда.
Сам PendingIntent - это просто ссылка на токен, поддерживаемый системой, описывающий исходные данные, используемые для его получения. Это означает, что, даже если процесс принадлежащего ему приложения будет уничтожен, сам PendingIntent останется пригодным для использования другими процессами, которым он был предоставлен. Если создавшее приложение позже повторно извлекает тот же тип PendingIntent (та же операция, то же действие Intent, данные, категории и компоненты и те же флаги), оно получит PendingIntent, представляющий тот же токен, если он все еще действителен, и может таким образом, вызовите метод cancel (), чтобы удалить его.
источник
Pending Intent - это намерение, которое предоставляет все разрешения другому приложению для выполнения определенных работ. Когда основное действие уничтожено, ОС Android забирает разрешение у него.
источник