🚀 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 ViewBinding elimina a necessidade de findViewById, reduzindo o risco de erros em tempo de execução e tornando o código muito mais conciso.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️