Iniciando outras atividades

Propaganda
Iniciando outras atividades
Intent
• INTENT = intenção?
• É um objeto-mensageiro usado para solicitar uma ação e
mandar dados para alguma outra atividade no Android.
• 3 usos:
– Iniciar uma outra Activity
• pode ser do mesmo programa
– Iniciar um Service
– Mandar uma mensagem para “todos”
(PendingIntent)
(ServiceIntent)
(BroadcastIntent)
• Opcional: quem foi chamado pode mandar dados de volta
Iniciando outra atividade do
mesmo programa
Intent intent = new Intent(estaActivity.this, outraActivity.class);
Intent.putExtra(“chave1”, “valor1”);
Intent.putExtra(“chave2”, “valor2”); …
startActivity(intent);
– Chaves e valores são dependentes da aplicação
Quem recebe:
Intent intent = getIntent();
String valor1 = Intent.getExtraString(“chave1”);
String valor2 = Intent.getExtraString(“chave1”);
Enviando diversos dados
Quando há vários dados a enviar, e de vários tipos,
pode-se criar e enviar um Bundle.
Bundle pacote = new Bundle();
pacote.putExtra(“dado1”, “valor1”)
pacote.putExtra(“dado2”, “valor2”)
intent.putExtras (pacote);
startActivity (intent);
Quem recebe:
Bundle pacote = intent.getExtras();
dado1 = pacote.getString(“dado1”);
Mandando dados,
esperando volta
Quem chama:
Intent intent = new Intent(......);
intent.putExtra(.....);
startActivityForResult (intent, REQUEST_CODE);
 código inventado por você
Quem foi chamado, opera como anteriormente...
Mas ao terminar tem que chamar o método finish(), que é
implementado assim:
@Override
public void finish() {
Intent dados = new Intent();
dados.putExtra(“valor1a", “xxxyyyzzz"); // pode haver vários valores...
setResult(RESULT_OK, dados);
super.finish();
}
...... Continua ...... >>>>>>
Recebendo o retorno
• Quem chamou originalmente tem que implementar
onActivityResult
@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && reqCode == REQUEST_CODE) {
if (data.hasExtra("returnKey1")) {
Toast.makeText(this, data.getExtras().getString("returnKey1"),
Toast.LENGTH_SHORT).show();
}
}
Intents implícitos
• Um aplicativo pode definir o componente de destino diretamente na
intenção (intento explícito) ou pedir o sistema Android para avaliar
componentes registrados com base nos dados de intenção (Intenções
implícitas).
• Por exemplo: executa um intent dirigido a “sei lá que aplicação que saiba
tirar fotos”
• Android define várias categorias pré-definidas, e para cada uma delas, as
formas de bundles que podem ser enviados.
• Muitas vezes o bundle pode ser obtido pelo “parsing” de uma URI.
– por exemplo, um site ou um e-mail. Por este bundle, o sistema
consegue determinar a aplicação.
String url = "http://intervox.nce.ufrj.br";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Outro exemplo: telefonar
Intent it = new Intent(Intent.ACTION_DIAL);
Uri = Uri.parse(“tel:25983339”));
it.setData (Uri);
startActivity(it);
Isso é também chamado de Late Runtime Binding
• significa que o Android em tempo de execução resolver a
classe que irá executar a ação, pode ser classe diferente
aprofundado sobre o tipo de dados especificados
Outro exemplo: enviar email
Usando chooser
String uriText =
"mailto:[email protected]" +
"?subject=" + URLEncoder.encode("some subject text here") +
"&body=" + URLEncoder.encode("some text here");
Uri uri = Uri.parse(uriText);
Intent it = new Intent(Intent.ACTION_SENDTO);
it.setData(uri);
startActivity(Intent.createChooser(it, "Send email"));
Sua aplicação pode ser usada
pelas outras aplicações
• Intent Filters: informação no Manifest indicando que a Activity consegue
atender a certos pedidos.
<activity android:name=“MainActivity“>
...
<intent-filter>
<action android:name=“fotosEspeciais"/>
<category android:name="android.intent.category.DEFAULT" />
<data …. />
</intent-filter>
</activity>
Se algum intent pedir por “fotosEspeciais”, seu aplicativo “será aberto”.
Download