EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
Kotlinchevron-right

StartActivityForResult está obsoleto!

Mohit Sharma2 min read • Published Sep 14, 2021 • Updated May 12, 2022
Kotlin
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty

Introdução

O Android tem estado na borda da evolução por um tempo recentemente, com atualizações para androidx.activity:activity-ktx para 1.2.0. Ele depreciou startActivityForResult em favor de registerForActivityResult.
Foi um dos primeiros fundamentos que qualquer desenvolvedor Android aprendeu e a espinha dorsal da maneira de comunicação do Android entre dois componentes. O design da API era simples o suficiente para ser iniciado rapidamente, mas tinha seus contras, como a dificuldade de encontrar o chamador em aplicativos do mundo real (exceto cmd+F no projeto 😂), obter resultados no fragmento, resultados perdidos se o componente é recriado, entra em conflito com o mesmo código de solicitação, etc.
Vamos tentar entender como usar a nova API com alguns exemplos.

Exemplo 1: a atividade A chama a atividade B para o resultado

Antiga escola:
Novo Caminho:
Como você deve ter notado, registerForActivityResult utiliza dois parâmetros. O primeiro define o tipo de ação/interação necessária (ActivityResultContracts) e o segundo é uma função de chamada de resposta onde obtemos o resultado.
Não mudou muito, não é mesmo? Vamos verificar outro exemplo.

Exemplo 2: Inicie um componente externo, como a câmera, para obter a imagem:

O snippet acima é o código completo que obtém uma imagem de visualização da câmera. Não há necessidade de código de solicitação de permissão, pois isso é feito automaticamente para nós!
Outro benefício de usar a nova API é que ela força os desenvolvedores a usar o contrato correto. Por exemplo, com ActivityResultContracts.TakePicture() — que retorna a imagem completa — você precisa passar um URI como parâmetro para launch, o que reduz o tempo de desenvolvimento e a chance de erros.
Outros contratos padrão disponíveis podem ser encontrados em aqui.

Exemplo 3: o fragmento A chama a Atividade B para o resultado

Esse foi outro problema com o sistema antigo, sem nenhuma implementação limpa disponível, mas a nova API funciona de forma consistente em atividades e fragmentos. Portanto, referenciamos e adicionamos o trecho do exemplo 1 aos nossos fragmentos.

Exemplo 4: receber o resultado em uma classe não Android

Maneira antiga: .
Com a nova API, isso é possível usando ActivityResultRegistry diretamente.

Resumo

Encontrei registrarForActivityResult útil e limpo. Alguns dos prós, na minha opinião, são:
  1. Melhore a legibilidade do código, não é necessário lembrar de pular para onActivityResult() depois startActivityForResult.
  2. ActivityResultLauncher retornou do registerForActivityResult usado para iniciar componentes, definindo explicitamente o parâmetro de entrada para os resultados desejados.
  3. Foi removido o código padrão para solicitar permissão do usuário.
Espero que isso tenha sido informativo e tenha gostado de lê-lo.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Além do básico: aprimorando a API Kotlin Ktor com pesquisa vetorial


Sep 18, 2024 | 9 min read
Tutorial

Construindo um aplicativo Android


Aug 12, 2024 | 6 min read
Tutorial

Descubra seu Airbnb ideal: implementando um Spring Boot e Atlas Search com o driver Kotlin Sync


Aug 06, 2024 | 8 min read
Tutorial

Dominando o Kotlin: criando uma API com Ktor e MongoDB Atlas


Sep 17, 2024 | 9 min read
Sumário