Intereting Posts
Настройка цветов списка ListView для Android? Только в некоторых телефонах ListView не обновляется после notifyDataSetChanged () ListView не обновляется до тех пор, пока клавиатура не будет скрыта Как распознать конкретную сборку apk, даже если пользовательское обновление apk в Google Play Сотовые панели действий и поля Как я могу проверить, заряжается ли телефон Android Как выполняется обработка ошибок в Retrofit 2? Я не могу найти класс RetrofitError, который предлагает большинство решений? Определите собственный андроид моего приложения: versionCode во время выполнения Отображение вида камеры внутри html в андроиде, а затем щелкнуть снимок Строка запроса URL-запроса дооснащения не должна быть заменена блоком Несколько общих элементов Изменение источника ImageView Есть ли хороший сайт для отслеживания вашего рейтинга на Android Market? Масштабирование проблемы на Android – почему картина такая неуклюжая? Android-контроллер мультимедиа отображает отображение на короткое время

Что такое Android PendingIntent?

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

Solutions Collecting From Web of "Что такое Android PendingIntent?"

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

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

INTENT

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

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

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

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

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

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

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

  • Создать намерение
  • б. Добавить параметры намерения-> Пример. Какой тип намерения мы отправляем в ОС или какие-либо атрибуты, связанные с этим намерением, такие как текстовая строка или что-то, что передается вместе с намерением
  • с. ПРОВЕРЬТЕ НАМЕРЕНИЕ

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

PENDINGINTENT

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

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

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

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

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

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

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

Усилия бывают двух типов: явные и неявные

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

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

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

  1. Slidenerd.com
  2. Учебник Android Intent
  3. Еще немного

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

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

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

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

И затем я нашел это видео, Google I / O 2013, Beyond the Blue Dot session . В этом видео экс-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(...) } } 

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

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

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

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

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

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

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

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

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

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

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

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 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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