2.4
Construção da nossa primeira Intent
Agora que já sabemos utilizar as
Intents e compreendemos os
Intent
Filters, vamos tirar proveito disto alterando o nosso HelloWorld 2.0 para incluir uma activity que irá responder a uma intent implícita.
A ideia é que na nossa aplicação de exemplo existam duas atividades: a
MainActivity, que continuará sendo utilizada para o usuário informar o seu
nome, e a SaudacaoActivity, que será responsável apenas por exibir uma sau-
dação para o usuário a partir das informações contidas na intent. Ela também
possuirá uma categoria própria e responderá a uma ação específica. A figura 2.3 demonstra a ideia.
40
Casa do Código
Capítulo 2. Entenda o funcionamento do Android
Figura 2.3: HelloWorld utilizando intents
Primeiramente, devemos criar um novo XML de layout que será utilizado pela
SaudacaoActivity para exibir a mensagem de saudação para o usuário. Para isto, acesse o menu File > New > Android XML Layout File. Informe o nome
do arquivo como saudacao, não é necessário alterar nenhuma outra informação,
como na figura 2.4:
41
2.4. Construção da nossa primeira Intent
Casa do Código
Figura 2.4: Criando um novo XML de layout
Neste novo layout incluiremos apenas um TextView para mostrar a saudação
ao usuário. O código ficará assim:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/saudacaoTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
42
Casa do Código
Capítulo 2. Entenda o funcionamento do Android
</LinearLayout>
Com o layout pronto, vamos criar uma nova Activity para a aplicação, através
do menu File > New > Class. Na caixa de diálogo apresentada, selecione o pacote br.com.casadocodigo.helloandroid e para o nome da classe informe
SaudacaoActivity, conforme a figura 2.5 e pressione Finish.
Figura 2.5: Criando uma nova classe
Podemos então criar a nossa SaudacaoActivity, que herdará de Activity:
43
2.4. Construção da nossa primeira Intent
Casa do Código
public class SaudacaoActivity extends Activity {
// teremos que implementar o método onCreate
}
Na implementação do método
onCreate, teremos a chamada para
super.onCreate e em seguida precisamos indicar qual o layout será utilizado,
que no nosso caso será o layout saudacao:
public class SaudacaoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.saudacao);
}
}
Podemos definir constantes para identificar o extra que a intent possui, pois vamos utilizá-la nos métodos onCreate:
public class SaudacaoActivity extends Activity {
public static final String EXTRA_NOME_USUARIO =
"helloandroid.EXTRA_NOME_USUARIO";
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.saudacao);
}
}
Com isso, podemos recuperar a
Intent, que nos foi passada através do
método
getIntent, e checar se existe um extra com o identificador defi-
nido, ou seja, se a
Intent possui o nome do usuário para a exibição da
saudação.
Caso exista um extra, obtemos o seu valor utilizando o método
intent.getStringExtra(EXTRA_NOME_USUARIO). Se a intent fornecida
não possui nenhum extra, então apresentamos um aviso para o usuário.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
44
Casa do Código
Capítulo 2. Entenda o funcionamento do Android
setContentView(R.layout.saudacao);
TextView saudacaoTextView =
(TextView) findViewById(R.id.saudacaoTextView);
Intent intent = getIntent();
if (intent.hasExtra(EXTRA_NOME_USUARIO)) {
String saudacao = getResources().getString(R.string.saudacao);
saudacaoTextView.setText(saudacao + " " +
intent.getStringExtra(EXTRA_NOME_USUARIO));
} else {
saudacaoTextView.setText("O nome do usuário não foi informado");
}
}
Em seguida, precisaremos alterar o método
surpreenderUsuario da
MainActivity para deixar de exibir a saudação e criar a Intent que acionará
a nova atividade. Com isso, vamos ter que definir também a ação e a categoria da atividade que acabamos de criar. Podemos fazer isso definindo mais duas constantes na classe SaudacaoActivity:
public class SaudacaoActivity extends Activity {
public static final String EXTRA_NOME_USUARIO =
"helloandroid.EXTRA_NOME_USUARIO";
// As duas novas constantes
public static final String ACAO_EXIBIR_SAUDACAO =
"helloandroid.ACAO_EXIBIR_SAUDACAO";
public static final String CATEGORIA_SAUDACAO =
"helloandroid.CATEGORIA_SAUDACAO";
// método onCreate
}
No método surpreenderUsuario, criamos uma nova Intent com a ação
desejada e nela adicionamos a categoria definida anteriormente. Em seguida, incluí-
mos como informação extra o valor informado no EditText. E por fim, iniciamos uma nova activity passando a Intent criada.