Что такое Android PendingIntent?

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

21 ответ

Решение

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

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

INTENT

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

Пример:

  1. Трансляция сообщения
  2. Запустить камеру
  3. Начать сервис
  4. Начать деятельность
  5. Показать веб-страницу или список контактов
  6. Наберите номер телефона или ответьте на телефонный звонок

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

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

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

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

  • Создать намерение
  • б. Добавьте опции Intent -> Ex. какой тип намерения мы отправляем в ОС или какие-либо атрибуты, связанные с этим намерением, такие как текстовая строка или что-то переданное вместе с намерением
  • с. ЗАПУСТИТЬ Намерение

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

PENDINGINTENT

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

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

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

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

Это большая разница между ожидающим намерением и обычным намерением. Короче:

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

В ожидании намерения -> REQUIRES A REGULAR INTENT TO BE CREATED

Намерения бывают двух типов - явные и неявные

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

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

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

  1. Slidenerd.com
  2. Android Intent Tutorial
  3. Еще немного

Почему 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. Источник

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

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

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

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

А потом я нашел это видео, Google I / O 2013, за пределами сеанса Blue Dot. В этом видео экс-гуглер Джайкумар Ганеш объясняет, что 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(...)   
    }
}

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

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

Намерение - это особая команда в Android, которая позволяет отправлять команду ОС Android для выполнения чего-то определенного. Думайте об этом как о действии, которое должно произойти. Существует множество действий, таких как отправка электронного письма, прикрепление фотографии к электронному письму или даже запуск приложения. Логический рабочий процесс создания намерения обычно выглядит следующим образом: a. Создать намерение б. Добавить опции Intent -> Ex. какой тип намерения мы отправляем в ОС или какие-либо атрибуты, связанные с этим намерением, такие как текстовая строка или что-то переданное вместе с намерением c. ВЫПОЛНИТЬ Намерение

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

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

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

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

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

умысел

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

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

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

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

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

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

 PendingIntent aPendingIntent = PendingIntent.getService(Context, 0, aIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);

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

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

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

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

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

Чтобы выполнить трансляцию через ожидающее намерение, получите 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 по сути, это способ определить ваше собственное намерение, но вы позволяете другим приложениям или службам, таким как notification manager, alarm manager и т. д. для обработки сроков его выполнения

На простом языке,
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

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

Ожидаемое намерение

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

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

Если вы хотите открыть некоторые компоненты приложения, такие как Activity/Service/BroadcastReceiver, позже или через определенный временной интервал, в этом случае вам необходимо отправить PendingIntent. Это действует как бланк разрешения, который вы дали другим приложениям для запуска кода вашего приложения от вашего имени через некоторое время. Таким образом, PendingIntent работает за пределами границ процесса, например, вы хотите, чтобы AlarmManager было другим приложением в другом процессе, а затем выполнялось действие AlarmManager в вашем приложении, указанное в PendingIntent.

Я обнаружил PendingIntents в уведомлениях. Итак, вот простое объяснение:

Мы хотим предоставить намерение для уведомления, в этом случае мы хотим открыть действие, которое выполняет функцию захвата камеры. Здесь, если мы передаем просто Intent, NotificationManager не имеет этого разрешения, хотя мое приложение имеет это разрешение, указанное в Manifest; из-за этого действие не будет работать, поскольку у NotificationManager нет разрешения на это.

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

ПРИМЕЧАНИЕ. Ожидаемое намерение требует предварительной настройки обычного намерения.

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

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

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

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

Другие вопросы по тегам