Eu sou um novato no Android. Li a documentação do Android, mas ainda preciso de mais esclarecimentos. Alguém pode me dizer o que exatamente PendingIntent
é?
538
Eu sou um novato no Android. Li a documentação do Android, mas ainda preciso de mais esclarecimentos. Alguém pode me dizer o que exatamente PendingIntent
é?
A PendingIntent
é um token que você fornece a um aplicativo externo (por exemplo NotificationManager
, AlarmManager
Tela inicial AppWidgetManager
ou outros aplicativos de terceiros), que permite que o aplicativo externo use as permissões do seu aplicativo para executar um trecho de código predefinido .
Se você der uma intenção ao aplicativo estrangeiro, ele executará o seu Intent
com suas próprias permissões. Mas se você der um aplicativo externo a PendingIntent
, ele o executará Intent
usando a permissão do aplicativo.
Intenção pendente é um token que você fornece a algum aplicativo para executar uma ação em nome dos seus aplicativos, independentemente de seu processo de inscrição estar ativo ou não.
Eu acho que a documentação é suficientemente detalhada: Documentos de intenção pendente .
Pense em casos de uso para Intenções Pendentes, como (Broadcasting Intents, planejando alarmes) e a documentação se tornará mais clara e significativa.
fonte
No meu caso, nenhuma das respostas acima nem a documentação oficial do google me ajudaram a entender o conceito de
PendingIntent
classe.E então encontrei este vídeo, Google I / O 2013, além da sessão Blue Dot . Neste vídeo, o ex-googler Jaikumar Ganesh explica o que
PendingIntent
é, e foi isso que me deu uma visão geral disso.Abaixo está apenas a transcrição do vídeo acima ( das 15:24 ).
Essa explicação fica mais clara com esse trecho de código (incluído no slide da sessão).
fonte
Por que PendingIntent é necessário? Eu estava pensando como
Intent
ouIntent
para o mesmo propósito.Por exemplo
Intent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
Se eu enviar
bluetoothIntent
para outro aplicativo, que não tem permissãoandroid.permission.BLUETOOTH_ADMIN
, esse aplicativo de recebimento não poderá ativar o BluetoothstartActivity(bluetoothIntent)
.A limitação é superada usando
PendingIntent
. ComPendingIntent
o aplicativo receptor, não é necessárioandroid.permission.BLUETOOTH_ADMIN
ativar o Bluetooth. Fonte .fonte
Intenção pendente é uma intenção que começará em algum momento no futuro. A intenção normal começa imediatamente quando é passada para
startActivity(Intent)
ouStartService(Intent)
.fonte
Uma intenção futura que outros aplicativos possam usar.
E aqui está um exemplo para criar um:
fonte
ANÁLOGO TAXI
Intenção
As intenções geralmente são usadas para iniciar os Serviços. Por exemplo:
É como quando você pede um táxi:
Intenção pendente
Você precisará usar algo como isto:
Agora, esse terceiro iniciará o serviço agindo em seu nome. Uma analogia da vida real é a Uber ou a Lyft, ambas empresas de táxi.
Você envia uma solicitação de carona para o Uber / Lyft. Eles então vão em frente e ligam para um de seus motoristas em seu nome.
Portanto:
fonte
Um PendingIntent é um token que você fornece a outro aplicativo (por exemplo, Notification Manager, Alarm Manager ou outros aplicativos de terceiros), que permite que esse outro aplicativo use as permissões do seu aplicativo para executar um trecho de código predefinido. Para executar uma transmissão por uma intenção pendente, obtenha um PendingIntent via PendingIntent.getBroadcast (). Para executar uma atividade através de uma intenção pendente, você recebe a atividade via PendingIntent.getActivity ().
fonte
O que é uma intenção?
Um Intent é um comando específico no Android que permite enviar um comando ao sistema operacional Android para fazer algo específico. Pense nisso como uma ação que precisa ocorrer. Existem muitas ações que podem ser executadas, como enviar um email, anexar uma foto a um email ou até iniciar um aplicativo. O fluxo de trabalho lógico da criação de uma intenção é geralmente o seguinte: a. Crie a intenção b. Adicionar opções de intenção -> Ex. que tipo de intenção estamos enviando para o SO ou quaisquer atributos associados a essa intenção, como uma sequência de texto ou algo sendo transmitido juntamente com a intenção c. EXECUTAR a intenção
Exemplo da vida real: digamos que eu acordo de manhã e "PRETENDO" ir ao banheiro. Primeiro terei que pensar em ir ao banheiro, mas isso realmente não me leva ao banheiro. Terei que dizer ao meu cérebro para sair da cama primeiro, depois caminhar até o banheiro e depois soltar, depois lavar as mãos e depois limpar as mãos. Depois de saber para onde estou indo, ENVIO o comando para começar e meu corpo entra em ação.
O que são intenções pendentes?
Continuando com o exemplo da vida real, digamos que eu quero tomar banho, mas quero tomar banho depois que escovo os dentes e tomo café da manhã. Então eu sei que não vou tomar banho até pelo menos 30 a 40 minutos. Ainda tenho na cabeça que preciso preparar minhas roupas e depois subir as escadas de volta ao banheiro, depois me despir e depois tomar banho. No entanto, isso não acontecerá até 30 a 40 minutos. Agora tenho uma intenção PENDENTE de tomar banho. Está PENDENTE por 30-40 minutos.
Essa é praticamente a diferença entre uma intenção pendente e uma intenção regular. As intenções regulares podem ser criadas sem uma intenção pendente; no entanto, para criar uma intenção pendente, é necessário ter uma configuração de intenção regular primeiro.
fonte
PendingIntent
é basicamente um objeto que envolve outroIntent
objeto. Em seguida, ele pode ser passado para um aplicativo estrangeiro no qual você concede ao aplicativo o direito de executar a operação, ou seja, execute a intenção como se fosse executada a partir do processo do seu próprio aplicativo (mesma permissão e identidade). Por motivos de segurança, você sempre deve passar intenções explícitas para um PendingIntent em vez de estar implícito.fonte
Em um idioma fácil,
1. Uma descrição de uma ação de Intenção e Destino a ser executada. Primeiro você precisa criar uma intenção e depois passar uma classe java específica que deseja executar para a intenção.
2. Você pode chamar a classe java que é sua classe de ação de classe por PendingIntent.getActivity, PendingIntent.getActivities (Contexto, int, Intent [], int), PendingIntent.getBroadcast (Contexto, int, Intenção, int) e PendingIntent. getService (Contexto, int, Intenção, int); Aqui você vê o Intent que vem da etapa 1
3. Lembre-se de que ... Ao atribuir um PendingIntent a outro aplicativo, você concede o direito de executar a operação especificada.
Foi isso que aprendi depois de uma longa leitura.
fonte
Um PendingIntent envolve a Intenção geral com um token que você fornece ao aplicativo estrangeiro para executar com sua permissão. Por exemplo:
fonte
Como o próprio nome sugere .. PendingIntent
você pode pendurá-lo (depois de algum tempo). Funciona como a outra intenção. É uma maneira de entregar sua tarefa a outro aplicativo para executar em seu nome.
fonte
Uma intenção pendente especifica uma ação a ser tomada no futuro. Ele permite que você passe um Intent futuro para outro aplicativo e permita que o aplicativo execute esse Intent como se tivesse as mesmas permissões que o seu aplicativo, independentemente de seu aplicativo ainda estar presente quando o Intent for invocado.
É um token que você fornece a um aplicativo externo que permite que o aplicativo externo use as permissões do seu aplicativo para executar um trecho de código predefinido.
Se você der uma intenção ao aplicativo estrangeiro, e esse aplicativo enviar / difundir a intenção que você deu, eles executarão a intenção com suas próprias permissões. Porém, se você der ao Intent Pending Intent uma aplicação estrangeira criada usando sua própria permissão, esse aplicativo executará o Intent contido usando a permissão do seu aplicativo.
Para executar uma transmissão por uma intenção pendente, obtenha um PendingIntent via PendingIntent.getBroadcast (). Para executar uma atividade através de uma intenção pendente, você recebe a atividade via PendingIntent.getActivity ().
É uma ação de intenção que você deseja executar, mas posteriormente. Pense nisso colocando uma intenção no gelo. O motivo é necessário porque um Intent deve ser criado e iniciado a partir de um Contexto válido em seu aplicativo, mas há certos casos em que um não está disponível no momento em que você deseja executar a ação porque você está tecnicamente fora do contexto do aplicativo (o dois exemplos comuns estão lançando uma atividade de uma notificação ou um BroadcastReceiver.
Ao criar um PendingIntent que você deseja usar para iniciar, digamos, uma Atividade enquanto tiver o Contexto para fazê-lo (de dentro de outra Atividade ou Serviço), você pode passar esse objeto para algo externo para iniciar parte do seu aplicativo em seu nome.
Um PendingIntent fornece um meio para os aplicativos funcionarem, mesmo após a saída do processo. É importante observar que, mesmo depois que o aplicativo que criou o PendingIntent foi morto, esse Intent ainda pode ser executado. Uma descrição de uma ação de intenção e destino a ser executada com ela. As instâncias dessa classe são criadas com getActivity (Contexto, int, Intenção, int), getBroadcast (Contexto, int, Intenção, int), getService (Contexto, int, Intenção, int); o objeto retornado pode ser entregue a outros aplicativos para que eles possam executar a ação descrita em seu nome posteriormente.
Ao atribuir um PendingIntent a outro aplicativo, você concede o direito de executar a operação especificada como se o outro aplicativo fosse você mesmo (com as mesmas permissões e identidade). Dessa forma, você deve ter cuidado com a criação do PendingIntent: geralmente, por exemplo, o Intent base que você fornece terá o nome do componente explicitamente definido como um de seus próprios componentes, para garantir que ele seja finalmente enviado para lá e para nenhum outro lugar.
Um próprio PendingIntent é simplesmente uma referência a um token mantido pelo sistema que descreve os dados originais usados para recuperá-lo. Isso significa que, mesmo que o processo de seu aplicativo proprietário seja interrompido, o próprio PendingIntent permanecerá utilizável de outros processos que lhe foram fornecidos. Se o aplicativo de criação recuperar novamente o mesmo tipo de PendingIntent (mesma operação, mesma ação de intenção, dados, categorias e componentes e mesmos sinalizadores), ele receberá um PendingIntent representando o mesmo token, se ainda for válido, e poderá chame assim cancel () para removê-lo.
fonte
Intenção pendente é uma intenção que fornece toda a permissão para outro aplicativo para executar determinadas obras. Quando a atividade principal é destruída, o sistema operacional Android recupera a permissão.
fonte