🚀 2.4 Construção da nossa primeira Intent
Agora que já sabemos utilizar as Intents e compreendemos os Intent Filters, vamos alterar o nosso projeto para incluir uma atividade que responda a uma Intent Implícita, utilizando as práticas modernas de desenvolvimento.
A ideia é que na nossa aplicação existam duas atividades: a MainActivity, para o usuário informar o nome, e a SaudacaoActivity, responsável por exibir a mensagem.
Criando o Layout com ViewBinding
No Android Studio 2023.1 (Hedgehog), utilizamos o ViewBinding para acessar os componentes do layout de forma segura e eficiente. Primeiro, crie o arquivo saudacao.xml:
<?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"
android:padding="16dp">
<TextView
android:id="@+id/textSaudacao"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp" />
</LinearLayout>Implementando a SaudacaoActivity (Java 17)
Nossa atividade agora herdará de AppCompatActivity e utilizará o Binding gerado automaticamente para acessar o TextView.
public class SaudacaoActivity extends AppCompatActivity {
public static final String EXTRA_NOME_USUARIO = "com.exemplo.EXTRA_NOME_USUARIO";
public static final String ACAO_EXIBIR_SAUDACAO = "com.exemplo.ACAO_EXIBIR_SAUDACAO";
public static final String CATEGORIA_SAUDACAO = "com.exemplo.CATEGORIA_SAUDACAO";
private ActivitySaudacaoBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Inicialização do ViewBinding
binding = ActivitySaudacaoBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
var intent = getIntent();
if (intent.hasExtra(EXTRA_NOME_USUARIO)) {
var nome = intent.getStringExtra(EXTRA_NOME_USUARIO);
binding.textSaudacao.setText("Olá, " + nome + "!");
} else {
binding.textSaudacao.setText("O nome não foi informado.");
}
}
}Disparando a Intent Implícita
Na MainActivity, vamos configurar o botão para disparar a intenção. Note o uso de var para manter o código limpo:
public void surpreenderUsuario(View v) {
var intent = new Intent(SaudacaoActivity.ACAO_EXIBIR_SAUDACAO);
intent.addCategory(SaudacaoActivity.CATEGORIA_SAUDACAO);
var texto = binding.editNome.getText().toString();
intent.putExtra(SaudacaoActivity.EXTRA_NOME_USUARIO, texto);
startActivity(intent);
}Registro no AndroidManifest.xml
Para que a SaudacaoActivity possa ser encontrada pelo sistema através da ação definida, devemos configurá-la no manifesto:
<activity android:name=".SaudacaoActivity">
<intent-filter>
<action android:name="com.exemplo.ACAO_EXIBIR_SAUDACAO" />
<category android:name="com.exemplo.CATEGORIA_SAUDACAO" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>TIP
O uso de
ViewBindingelimina a necessidade defindViewById, reduzindo o risco de erros em tempo de execução e tornando o código muito mais conciso.