Intent e Intent-Filter
No post desta semana utilizaremos um aplicativo simples para mostrar a funcionalidade das classes Intent e IntentFilter que são o coração do Android, mas antes de irmos para a prática falaremos um pouco de ambas.
Intent
A classe Intent (“intenção em português”) representa uma ação que a aplicação executará, pode-se dizer que a Intent representa a intenção da aplicação de realizar alguma tarefa. Isto é, a mensagem é enviada ao sistema operacional que irá decidir o que fazer em seguida.
Uma intente pode ser utilizada para abrir uma tela:
Intent intent = new Intent(this, Tela2.class);
startActivity(intent);
ou
Intent intent = new Intent(“ABRIR_TELA”);
startActivity(intent);
(Este Segundo exemplo será melhor explicado no tópico sobre IntentFilter).
O browser (em um endereço específico):
Uri uri = Uri.parse(“www.gooogle.com.br”);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
requer a permissão:
<uses-permission android:name=”android.permission.INTERNET” >
Efetuar uma ligação:
Uri uri = Uri.parse(“tel:66778899”);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
requer a permissão:
<uses-permission android:name=”android.permission.CALL_PHONE” >
Ver um contado da agenda:
Uri uri = Uri.parse(“content://com.android.contacts/contacs/1”);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
requer a permissão:
<uses-permission android:name=”android.permission.READ_CONTACTS” >
Ou todos os contados:
Uri uri = Uri.parse(“contente://com.android.contacts/contacts”);
Intent intent = new Intent(Intent.ACTION_PICK, uri);
startActvity(intent);
Iniciar algum processamento em segundo plano utilizando classes como BroadcastReceiver e Service que serão vistas em postagens futuras e muito mais. É possível também retornar o resultado de uma activity aberta com a intente com o método startActivityForResult(intente, codigo);
IntentFilter
A classe IntentFilter (“em português filtro de intenções”) serve para filtrar as ações de uma intent mapeando-as de acordo com a tarefa a ser executada. No segundo exemplo de intent usado para abrir uma tela informamos uma String coma ação ABRIR_TELA no construtor da classe Intent ao invés do contexto e da classe que representa a activity (tela) a ser aberta. Você deve estar se perguntando como saber qual activity será executada? Provavelmente alguém terá de configurar a ação ABRIR_TELA para que algo seja executado.
Veja o código xml da activity principal que mostra a configuração do intente-filter:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
No código estão definidas a ação MAIN e a categoria LAUNCHER.
A ação define o que a intente deseja fazer, nos exemplos de intent mostramos a ação Intent.ACTION_VIEW utilizada para mostrar algo na tela.
A categoria é usada em conjunto com a ação para descobrir o que a intente deseja realizar, por exemplo, a ação MAIN define a tela configurada como principal, ou seja, a primeira tela mostrada sempre que a aplicação for iniciada da mesma forma que o método public static void main (String[] args) do Java.
A categoria LAUNCHER define que a aplicação será iniciada manualmente pelo usuário e será visível na tela inicial do sistema.
Obs.: Toda ação precisa, por padrão, ter uma categoria definida, por exemplo, se definir a ação ABRIR_TELA e executar o código:
Intent intent = new Intent(“ABRIR_TELA”);
startActivity(intent);
Vai se deparar com este erro no logcat: “No Activity found to Handle Intent ...”.
Sempre que se executa uma ação com a intent, por padrão a intente define a categoria como DEFAULT, se está categoria não estiver mapeada na tag intente-filter a intente não executará.
Agora vamos a prática, crie um novo projeto e na tela new android application (caso esteja usando o eclipse) digite as informações como na imagem abaixo:
Altera o arquivo activity_main.xml de acordo com as informações abaixo:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="2dp"
android:gravity="center" >
<Button
android:id="@+id/abrirTela"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_abrir_tela" />
<Button
android:id="@+id/abrirTela2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_abrir_tela_2" />
<Button
android:id="@+id/abrirTela3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_abrir_tela_3" />
<Button
android:id="@+id/abrirBrowser"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_abrir_browser" />
<Button
android:id="@+id/verContatoAgenda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_ver_contato_agenda" />
<Button
android:id="@+id/verAgenda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_ver_agenda" />
<Button
android:id="@+id/fazerChamada"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_fazer_chamada" />
</LinearLayout>
Modifique o arquivo strings.xml da pasta resources de acordo com a imagem abaixo:
Na classe MainActivity adicione os seguintes métodos:
Método da Interface OnClickListener |
Retorna o texto da TelaTeste ao clicar o botão abrir tela 3 |
Inicializa os botãos da tela diretamente com o método setOnClickListener |
Código da classe tela exemplo:
Obs2.: No método oncreate da tela exemplo chamamos o método setResult(codigo, intent) que recebe os parâmetros código, que informa se a activity vai retornar alguma informação ou não e a intent com a mensagem a ser retornada. Neste exemplo utilizamos como código o número diretamente, mas poderíamos utilizar uma constante padrão do android como RESULT_OK;
Arquivo manifest do projeto com as permissões necessárias e a configuração da tag intent-filter:
Arquivo AndroidManifest.xml |
Bhai ne bhen ke seal tod dali brother sister sex stories
ResponderExcluir