quinta-feira, 14 de junho de 2018

Rumo ao Certificado Android: Intents

1. O que é?
Permite comunicação e execução entre Activities. Existem várias maneiras de utilizar Intent e a maneira de criá-las vai depender da situação.

2. Intent e Activity
2.1 Iniciar outra Activity do mesmo aplicativo

public MainActivity extends Activity{

  [...]

  public void startOtherActivity(){
     
     //Obter contexto. Se o método não for uma atividade, obter o 
     //contexto de outra forma
     Context context = this;    

     //A classe da Activity que quer iniciar
     Class otherActivity = OtherActivity.class;

     //Instanciar o Intent
     Intent intent = new Intent(context, otherActivity);

     //Iniciar a atividade
     startActivity(intent);
  }
}

2.2 Passando dados para a próxima Activity
Você pode inserir dados nos Intents para ser recuperado na outra Activity. Para isso, pode usar o método putExtra para inserir. O putExtra utiliza dois parâmetros: uma chave que identifica e um valor para ser armazenado. Note que o putExtra é soobrecarregado, e com por isso, vale para diversos tipos de dados.

public MainActivity extends Activity{

  [...]

  public void startOtherActivity(String valueToPass){
     
     //Obter contexto. Se o método não for uma atividade, obter o 
     //contexto de outra forma
     Context context = this;    

     //A classe da Activity que quer iniciar
     Class otherActivity = OtherActivity.class;

     //Instanciar o Intent
     Intent intent = new Intent(context, otherActivity);
     intent.putExtra("key1",valueToPass);

     //Iniciar a atividade
     startActivity(intent);
  }
}

Já na Activity que vai ser aberto, nós vamos pegar a Intent que iniciou a Activity e pegar os valores com um dos métodos getExtra. Como este não é possível fazer uma sobrecarga, então exites um getExtra para cada tipo, como o getStringExtra, getIntExtra, etc:

public OtherActivity extends Activity{

  @Override
  protected void onCreate(Bundle savedInstanceStates){
     
     Intent intent = getIntent();
     String valuePassed = intent.getStringExtra("key1");

     //Também pode usar este método aqui para verificar se o valor
     //existe, antes de tentar pegá-lo
     if(intent.hasExtra("key2")){
        int value = intent.getIntExtra("key2");
     }
    
  }
}

3. Intent Implícito
Usado para chamar atividades que não sabemos ou que não cabe ao aplicativo usar, como por exemplo, abrir um site. O usuário pode tanto usar o navegador padrão do Android como pode usar um de terceiro. Como o navegador não importa, usamos um intent implícito para o Sistema Operacional ou o usuário tratar de escolher.

3.1 Exemplo para Abrir uma Página Web
Para  abrir uma página web, criamos um objeto Uri semelhante ao que vimos no artigo de Requisição Web. Então, criamos a Intent, neste caso, usaremos um outro construtor, que receberá uma constante ACTION da classe e o URI.
Essas constantes ACTION ajudam a definir qual ação será usado. A documentação está aqui para mais detalhes.
resolveActivity verificará se o intent é capaz de ser executada. É bom verificar sempre porque caso tente executar uma intent e o aparelho não tem um aplicativo necessário, por exemplo, isso pode fazer com que o aplicativo dê pau. PS: o getPackageManager é um método que contém uma lista com todas as ações que seu equipamento pode executar.

private void openWebPage(String url){
   Uri webpage = Uri.parse(url);
   Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
   if(intent.resolveActivity(getPackageManager())!=null){
      startActivity(intent);
   }
}

3.2 Exemplo para Abrir um mapa
Aqui temos um esquema diferente. O Android usa um esquema de Uri para identificar os pedidos. Um Uri que inicia com um http significa que é uma página, enquanto um que inicia com geo, significa que é informação de geolocalização.

private void openMapa(String url){
   String adress = "1600 Amphitheatre Parkway, CA";
   Uri.Builder builder = new Uri.Builder();
   builder.scheme("geo")
          .path("0,0")
          .query(adress);

   Uri adressUri = builder.build();
   
   Intent intent = new Intent(Intent.ACTION_VIEW);
   intent.setData(adressUri);
   if(intent.resolveActivity(getPackageManager())!=null){
      startActivity(intent);
   }
}

4. Share Intent
É um intent especial para compartilhar mídias. Aqui utilizamos o ShareCompat, versão compat dos Share Intent. Basicamente serve para qualquer tipo de mídia que deseja compartilhar.

private void shareText(){
   String mimeType = "text/plain";
   String title = "Learning how to share";
   String text = "Hello World";

   ShareCompat.IntentBuilder.from(this)
              .setChooserTitle(title)
              .setType(mimeType)
              .setText(text);
}

Nenhum comentário:

Postar um comentário