O que é deeplink?
De forma resumida, o deeplink são chamadas de aplicativos para outros aplicativos para a realização de ações especificas.
Exemplo: No ifood, quando terminamos de selecionar os nossos produtos e finalizamos com a forma de pagamento Cartao Nubank e finalizamos o aplicativo do banco é aberto já mostrando os valores e informações. Ao fazer o pagamento, o app da nubank retorna ao ifood finalizando assim o pedido.
Problema
Nesse contexto, ao fazer essa chamada para um app externo, pode ser o que o app de origem seja "destruído" e juntamente com ele todas as informações armazenadas em memória. Abaixo eu vou mostrar como podemos manter o estado do aplicativo de origem e retornar ao ponto em que paramos.
Solução 1
Primeiramente vamos ter certeza que de que toda a informação vinda do Bundle está sendo perdida. No método OnCreate na Intent, verifique se o valor do parâmetro está vazio.
Se estiver nulo, vá para a solução 2, caso contrário siga o passo abaixo!
Como ainda estamos com algumas informações do Bundle armazenadas, basta a gente salvar o estado do que quisermos e posteriormente restaurar o estado. Vamos usar o metodo para salvar o estado.
protected override void OnSaveInstanceState(Bundle outState)
{
base.OnSaveInstanceState(outState);
// Salvar os dados da tela no Bundle
outState.PutString("MeuValor", meuValor);
}
Em seguida, basta chamar o metodo para restaurar esse estado
protected override void OnRestoreInstanceState(Bundle savedInstanceState)
{
base.OnRestoreInstanceState(savedInstanceState);
teste = savedInstanceState.GetString("MeuValor");
}
Solução 2
Se o Bundle está vindo zerado(null) então esta é a solução: Usaremos um artifício de persistência de dados temporárias no dispositivo para armazenar as informações que julgamos importantes.
Adicione o bloco de código abaixo:
protected override void OnSaveInstanceState(Bundle outState)
{
base.OnSaveInstanceState(outState);
// Salvar o valor de "MinhaVariavel" no SharedPreferences
GetPreferences(FileCreationMode.Private).Edit().PutString("TextoQualquer", MinhaVariavel).Apply();
}
Neste caso, não será necessário sobrescrever o método OnRestoreInstanceState, mas sim inserir um trecho dentro do OnCreate
MinhaVariavel= GetPreferences(FileCreationMode.Private).GetString("TextoQualquer", "");
Entendendo o que foi feito
O método GetPreferences o Android cria automaticamente um arquivo de preferências compartilhadas para você, associado à atividade atual, ou seja, ele persiste os dados temporariamente. Além disso, caso queira tornar essas informações visíveis a nivel global da aplicação, você pode utilizar o GetSharedPreferences.
Usando o GetSharedPreferences
A sintaxe muda um pouco, o sentido principal ainda é o mesmo.
protected override void OnSaveInstanceState(Bundle outState)
{
base.OnSaveInstanceState(outState);
// Salvar o valor de "MinhaVariavel" no SharedPreferences
ISharedPreferencesEditor editor = GetSharedPreferences("MeusEstados", FileCreationMode.Private).Edit();
editor.PutString("stringVariavel", MinhaVariavel);
editor.Apply();
}
Agora é só ir no onCreate!
MinhaVariavel = GetSharedPreferences("MeusEstados", FileCreationMode.Private).GetString("stringVariavel", "");
Caso queira saber mais sobre essas diferenças Clique aqui!
Até a próxima! :D
Top comments (0)