Pergunta

Eu sou um novato para o Android.Eu li o Android Documentação, mas eu ainda preciso de mais algum esclarecimento.Alguém pode me dizer o que é exatamente um PendingIntent o que é?

Foi útil?

Solução

UMA PendingIntent é um token que você dá a uma aplicação estrangeira (por exemplo NotificationManager, AlarmManager, Tela inicial AppWidgetManager, ou outras aplicações de terceiros), que Permite que o aplicativo estrangeiro use as permissões do seu aplicativo para executar uma peça de código predefinida.

Se você der à aplicação estrangeira uma intenção, ele executará seu Intent com suas próprias permissões. Mas se você der ao aplicação estrangeira um PendingIntent, esse aplicativo executará seu Intent usando a permissão do seu aplicativo.

Outras dicas

INTENÇÃO

As intenções são o padrão de mensagens do mecanismo de Android que expressa a intenção do usuário para executar algum trabalho.Eles permitem que você interaja com outros componentes definidos por você ou pelo sistema operacional Android.

Exemplo:

  1. Transmissão de uma mensagem
  2. Iniciar a câmera
  3. Iniciar um serviço
  4. Inicie uma atividade
  5. Exibir uma página da web ou uma lista de contatos
  6. Marcar um número de telefone ou atender uma chamada de telefone

    Eles são usados em ambos os sentidos

1) por que você chamar um componente

2)pelo sistema para notificá-lo de algum evento.

A lógica de fluxo de trabalho de criação de uma intenção geralmente é como segue:

  • Crie a Intenção
  • b.Adicionar Intenção opções-> Ex.que tipo de intenção que estamos enviando para o sistema operacional ou os atributos associados a essa intenção, como uma seqüência de caracteres de texto ou de algo a ser transmitido, juntamente com a intenção
  • c.EXECUTAR a Intenção

Exemplo Da Vida Real:Vamos dizer que eu acordar de manhã e eu "PRETENDE"para ir à casa de banho.Primeiro vou ter que PENSAR em ir para o banheiro, mas ISSO realmente NÃO me leva para o banheiro.Eu, então, tenho que dizer ao meu cérebro para sair da cama primeiro, em seguida, a pé, para o banheiro, e, em seguida, solte e, em seguida, vá lavar minhas mãos, em seguida, vá e limpe as mãos.Uma vez que eu sei para onde estou indo eu ENVIAR o comando para começar e o meu corpo entra em ação.

PENDINGINTENT

Um PendingIntent especifica uma ação a ser tomada no futuro.Ele permite a passagem de um futuro Intenção para outro aplicativo e permitir que o aplicativo para executar essa Intenção, como se tivesse o same permissions as your application, se ou não o aplicativo ainda está em torno de quando a Intenção de, eventualmente, é invocada.É um sinal de que você dá para uma aplicação externa que permite que o estrangeiro aplicativo para usar o aplicativo permissões para executar um determinado trecho de código.

Dando uma PendingIntent para outro aplicativo, você está concedendo a ele o direito de executar a operação que você tenha especificado como se o outro aplicativo foi-se (com as mesmas permissões e identidade).Como tal, você deve ter cuidado sobre como você construir o PendingIntent:muitas vezes, por exemplo, o da base de dados de Intenção de fornecer terá o nome do componente explicitamente definido para um de seus próprios componentes, para assegurar que ela é, em última análise, enviados para lá e em nenhum outro lugar.

É uma Intenção de ação que você deseja executar, mas em um momento posterior.Pensar é um colocar uma Intenção no gelo.A razão é necessária, é porque uma Intenção deve ser criado e lançado a partir de um válido Context em seu aplicativo, mas há certos casos em que a pessoa não está disponível no momento que você deseja executar a ação porque são tecnicamente fora do contexto da aplicação (os dois exemplos mais comuns são o lançamento de uma Atividade a partir de uma Notificação ou de uma BroadcastReceiver.Criando um PendingIntent você deseja usar para o lançamento, digamos, de uma Atividade ao mesmo tempo, você tem a Context para fazê-lo (a partir de dentro de outra Atividade ou Serviço)

Continuando a partir do exemplo da vida real:vamos dizer que eu quero tomar um banho, mas eu quero tomar banho DEPOIS eu escovo os dentes e comer o pequeno almoço.Então eu sei que eu não vou tomar banho por pelo menos 30 a 40 minutos.Eu ainda tenho na minha cabeça que eu preciso para preparar a minha roupa, e, em seguida, subir as escadas a pé de volta para a casa-de-banho, em seguida, despir-se e, em seguida, duche.No entanto, isso não irá acontecer até 30-40 minutos.Agora eu tenho um PENDENTE intenção de chuveiro.Ele está PENDENTE por 30-40 minutos.

Que é muito bonito a diferença entre um Pendente Intenção e Regular Intenção.Em resumo:

Regular Intenção -> DOES NOT REQUIRE PENDING INTENT TO BE MADE

Pendente Intenção -> REQUIRES A REGULAR INTENT TO BE CREATED

As intenções são de dois tipos- Explícita e Implícito

Intenção Explícita:Quando seu aplicativo está ciente de qual componente a chamada para executar alguma ação

Implícita A Intenção:Quando o aplicativo não está ciente de que o componente pode exatamente executar a ação desejada.Por Ex, Se você simplesmente dizer que você deseja exibir uma URL, o sistema decide de qual componente irá cumprir a intenção.

Para mais melhor e a ideia clara sobre as Intenções.Vist links abaixo

  1. Slidenerd.com
  2. Android Intenção Tutorial
  3. Alguns Mais

Uma intenção pendente é um token que você dá a algum aplicativo para executar uma ação em nome de seus aplicativos independente Se o seu processo de inscrição está vivo ou não.

Eu acho que a documentação é suficientemente detalhada:Documentos de intenção pendentes.

Pense em casos de uso para intenções pendentes, como (intenções de transmissão, agendamento de alarmes) e a documentação se tornará mais clara e significativa.

No meu caso, nenhuma das respostas acima nem documentação oficial do Google me ajudou a pegar o conceito de PendingIntent classe.

E então eu encontrei este vídeo, Google I/O 2013, Além do ponto azul sessão. Neste vídeo, o ex-garçom Jaikumar Ganesh explica o que PendingIntent é, e essa foi a coisa que me deu o panorama geral disso.

Abaixo está apenas a transcrição do vídeo acima (de 15:24).

Então, o que é uma intenção pendente?

É um token que seu processo de aplicativo dará ao processo de localização e O processo de localização o usará para acordar seu aplicativo quando um evento de interesse acontecer. Portanto, isso basicamente significa que seu aplicativo em segundo plano não precisa estar sempre em execução. Quando algo de interesse acontecer, vamos acordá -lo. Isso economiza muita bateria.

Essa explicação se torna mais clara com este trecho de código (que está incluído no slide da sessão).

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(...)   
    }
}

Por que o PendingIntent é necessário? Eu estava pensando como

  1. Por que o próprio aplicativo receptor não pode criar o Intent ou
  2. Por que não podemos usar um simples Intent Para o mesmo propósito.

Por exemploIntent bluetoothIntent= new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

Se eu enviar bluetoothIntent para outro aplicativo, que não tem permissão android.permission.BLUETOOTH_ADMIN, esse aplicativo de recebimento não pode ativar o Bluetooth com startActivity(bluetoothIntent).

A limitação é superada usando PendingIntent. Com PendingIntent o pedido de recebimento, não precisa ter android.permission.BLUETOOTH_ADMIN Para ativar o Bluetooth. Fonte.

A intenção pendente é uma intenção que começará em algum momento no futuro. A intenção normal começa imediatamente quando é passado para startActivity(Intent) ou StartService(Intent).

Uma intenção futura que outros aplicativos possam usar.
E aqui está um exemplo para criar um:

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

Analogia de táxi

Intenção

As intenções são normalmente usadas para iniciar serviços. Por exemplo:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
startService(intent);

É como quando você chama um táxi:

Myself = CurrentClass
Taxi Driver = ServiceClass

Intenção pendente

Você precisará usar algo assim:

Intent intent = new Intent(CurrentClass.this, ServiceClass.class);
PendingIntent pi = PendingIntent.getService(parameter, parameter, intent, parameter);
getDataFromThirdParty(parameter, parameter, pi, parameter);

Agora, este terceiro iniciará o serviço agindo em seu nome. Uma analogia da vida real é Uber ou Lyft, que são empresas de táxi.

Você envia um pedido de carona para o Uber/Lyft. Eles seguirão em frente e chamarão um de seus motoristas em seu nome.

Portanto:

Uber/Lyft ------ ThirdParty which receives PendingIntent
Myself --------- Class calling PendingIntent
Taxi Driver ---- ServiceClass

Um PendingIntent é um token que você fornece a outro aplicativo (por exemplo, gerente de notificação, gerenciador de alarme ou outros aplicativos de terceiros), que permite que esse outro aplicativo use as permissões do seu aplicativo para executar uma parte predefinida do código. Para realizar uma transmissão por meio de uma intenção pendente, obtenha um PENDENDINTENT VIA PENDENDINTENT.GETBROADCAST (). Para realizar uma atividade por meio de uma intenção pendente, você recebe a atividade por meio do pendingIntent.getActivity ().

O que é uma intenção?

Uma intenção é um comando específico no Android que permite enviar um comando para o sistema operacional Android para fazer algo específico. Pense nisso como uma ação que precisa ocorrer. Existem muitas ações que podem ser realizadas, como enviar um email ou anexar uma foto a um email ou até lançar um aplicativo. O fluxo de trabalho lógico de criar uma intenção é geralmente o seguinte: a. Crie a intenção b. Adicione opções de intenção -> Ex. Que tipo de intenção estamos enviando para o sistema operacional ou quaisquer atributos associados a essa intenção, como uma string de texto ou algo sendo passado junto com a intenção c. Execute a intenção

Exemplo da vida real: digamos que eu acordo de manhã e "pretendo" ir ao banheiro. Vou primeiro ter que pensar em ir ao banheiro, mas isso realmente não me leva ao banheiro. Vou ter que dizer ao meu cérebro para sair da cama primeiro, depois caminhar até o banheiro e depois soltar, depois lavar as mãos, depois limpe as mãos. Depois de saber para onde vou, envio o comando para começar e meu corpo age.

O que são intenções pendentes?

Continuando com o exemplo da vida real, digamos que eu queira tomar um banho, mas quero tomar banho depois de escovar os dentes e tomar o café da manhã. Então, eu sei que não vou tomar banho até pelo menos 30-40 minutos. Ainda tenho na minha cabeça que preciso preparar minhas roupas e depois subir as escadas de volta para o banheiro, depois me despir e 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, você precisa ter uma configuração de intenção regular primeiro.

PendingIntent é basicamente um objeto que envolve outro Intent objeto. Em seguida, ele pode ser passado para um aplicativo estrangeiro, onde você está concedendo a esse aplicativo o direito de executar a operação, ou seja, executar a intenção como se fosse executada do processo do seu próprio aplicativo (mesma permissão e identidade). Por razões de segurança, você deve sempre passar intenções explícitas para um interior pendente, em vez de estar implícito.

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

Em uma linguagem fácil,
1. Uma descrição de uma intenção e ação de destino para executar. Primeiro, você precisa criar uma intenção e depois passar por uma classe Java específica que deseja executar, para a intenção.
2. Você pode ligar para a classe Java, que é a sua classe de ação de classe PENDINGINTENT.GETATIVIVIDADE, PENDENDINTENT.GETIVIDIDADES (Contexto, Int, Intent [], int), PendingIntent.GetBroadcast (Contexto, Int, Intent, Int) e PendingIntent. getService (contexto, int, intenção, int); Aqui você vê aquela intenção que vem da etapa 1
3. Você deve ter em mente que ... Ao dar um interior pendente a outro aplicativo, está concedendo o direito de executar a operação que especificou.

Foi isso que aprendi depois de uma longa leitura.

Um pendingintent envolve a intenção geral com um token que você dá ao aplicativo estrangeiro para executar com sua permissão. Para por exemplo:

A notificação do seu aplicativo de música não pode tocar/pausar a música se você não desse o PendingIntent Para enviar transmissão porque seu aplicativo de música tem READ_EXTERNAL_STORAGE permissão que o aplicativo de notificação não. A notificação é um serviço de sistema (por isso é um aplicativo estrangeiro).

Como o seu nome sugere .. pendingIntent

Você pode pender (fazer isso depois de algum tempo). Funciona como a outra intenção. É uma maneira de fornecer sua tarefa a outro aplicativo para executar em seu nome.

Um Pendente Intenção especifica uma ação a ser tomada no futuro.Ele permite a passagem de um futuro Intenção para outro aplicativo e permitir que o aplicativo para executar essa Intenção como se ele tivesse as mesmas permissões que a sua aplicação, seja ou não o aplicativo ainda está em torno de quando a Intenção de, eventualmente, é invocada.

É um sinal de que você dá para uma aplicação externa que permite que o estrangeiro aplicativo para usar o aplicativo permissões para executar um determinado trecho de código.

Se você der a aplicação externa de uma Intenção, e que o aplicativo envia/transmite a Intenção que você deu, eles vão executar a Intenção com as suas próprias permissões.Mas se você em vez disso, dê a aplicação externa Pendente Intenção que você criou usando a sua própria permissão, que a aplicação irá executar o contido Intenção usando seu aplicativo de permissão.

Para realizar uma transmissão através de um pendente intenção de modo a obter uma PendingIntent via PendingIntent.getBroadcast().Para realizar uma atividade, através de um pendente a intenção de receber a atividade através de PendingIntent.getActivity().

É uma Intenção de ação que você deseja executar, mas em um momento posterior.Pensar é um colocar uma Intenção no gelo.A razão é necessária, é porque uma Intenção deve ser criado e lançado a partir de um Contexto válido na sua aplicação, mas há certos casos em que a pessoa não está disponível no momento que você deseja executar a ação porque são tecnicamente fora do contexto da aplicação (os dois exemplos mais comuns são o lançamento de uma Atividade a partir de uma Notificação ou um BroadcastReceiver.

Criando um PendingIntent você deseja usar para o lançamento, digamos, de uma Atividade ao mesmo tempo, você tem o Contexto (a partir de dentro de outra Atividade ou Serviço) você pode passar o objeto em torno de algo externo a fim de que a parte de lançamento de seu aplicativo em seu nome.

Um PendingIntent fornece um meio para aplicações de trabalho, mesmo após a sua sai do processo.É importante notar que, mesmo após a aplicação que criou o PendingIntent foi morto, de que a Intenção pode ainda executar.Uma descrição de uma Intenção e acção de destino para realizar com ele.Instâncias desta 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 transmitida a outros aplicativos para que eles possam executar a ação descrita em seu nome em um momento posterior.

Dando um PendingIntent para outro aplicativo, você está concedendo a ele o direito de executar a operação que você tenha especificado como se o outro aplicativo foi-se (com as mesmas permissões e identidade).Como tal, você deve ter cuidado sobre como você construir o PendingIntent:muitas vezes, por exemplo, o da base de dados de Intenção de fornecer terá o nome do componente explicitamente definido para um de seus próprios componentes, para assegurar que ela é, em última análise, enviados para lá e em nenhum outro lugar.

Um PendingIntent em si é simplesmente uma referência para um token mantidos pelo sistema, descrevendo os dados originais utilizados para recuperá-lo.Isso significa que, mesmo se o seu aplicativo proprietário do processo é morto, o PendingIntent em si permanecerá utilizável a partir de outros processos que foram dadas a ele.Se a criação de aplicações mais tarde re-recupera o mesmo tipo de PendingIntent (mesma operação, a mesma Intenção de ação, de dados, categorias e componentes, e mesmo bandeiras), ele vai receber um PendingIntent representando o mesmo token se que ainda é válido, e pode, assim chamada cancelar() para removê-lo.

A intenção pendente é uma intenção que fornece toda a permissão para outro aplicativo para fazer um determinado obras. Quando a atividade principal é destruída, o sistema operacional Android retira a permissão dela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top