domingo, 27 de setembro de 2015

Chamando Outros aplicativos de dentro de seu app

   Hoje resolvi escrever sobre como usarmos as Intents para chamar o browser de seu celular e como chamar o aplicativo de email.
   Primeiro criamos uma tela com duas caixas de texto e dois botões. O primeiro para a digitação da URL que será mostrada no browser e o segundo para abrir a tela de enviar email com o destinatário já preenchido.
   O objetivo com este post é aprender um pouco mais da utilidade da Intent e mostrar que o Android permite que a chamada de serviços do celular.
 


   Xml da Tela: 
   Do xml destaco a propriedade hint onde você coloca o texto que ficará no EditText antes do usuário digitar. destaco também a propriedade inputType onde setei o campo do email para este tipo para que o teclado ficasse com o @ já presente.
  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
        android:layout_width="match_parent"    
        android:layout_height="match_parent"    
        android:orientation="vertical"   >
  <EditText android:layout_width="match_parent"        
            android:layout_height="wrap_content"        
            android:hint="Digite a URL"        
            android:textSize="30sp"        
            android:id="@+id/edtUrl"        />
  <Button android:layout_width="match_parent"        
          android:layout_height="wrap_content"        
          android:text="Browser"        
          android:layout_gravity="center_vertical"        
          android:id="@+id/btnBrowser"
        />
  <EditText  android:layout_width="match_parent"        
             android:layout_height="wrap_content"        
             android:inputType="textEmailAddress"        
             android:hint="Digite o Destinatário"        
             android:textSize="30sp"        
             android:ems="10"        
             android:id="@+id/edtEmail" />
    <Button  android:layout_width="match_parent"        
             android:layout_height="wrap_content"        
             android:text="E-mail"        
             android:layout_gravity="center_vertical"        
             android:id="@+id/btnEmail"
        />

</LinearLayout>


   Código Java:

package br.com.nav.blog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText edtUrl;
    private EditText edtEmail;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Tratando os botões da tela:        
        Button btnBrowser = (Button) findViewById(R.id.btnBrowser);
        btnBrowser.setOnClickListener(this);
        Button btnEmail = (Button) findViewById(R.id.btnEmail);
        btnEmail.setOnClickListener(this);
        //Tratando as caixas de texto da tela        
        edtUrl = (EditText) findViewById(R.id.edtUrl);
        edtEmail = (EditText) findViewById(R.id.edtEmail);
    }

    @Override    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnBrowser:
                Uri uri = Uri.parse(edtUrl.getText().toString());
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                try {
                    startActivity(intent);
                } catch (Exception erro) {
                    Toast.makeText(this,"Browser Não disponível/Endereço incorreto",Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.btnEmail:
                Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
                        "mailto",edtEmail.getText().toString(), null));
                startActivity(Intent.createChooser(emailIntent, "Send email..."));
                break;
        }
    }
}
   Chamando o browser:
   Primeiro é preciso gerar uma Uri. No caso pego o endereço web do edtUrl, digitado pelo usuário. Para isto utilizo a classe Uri e passo a mesma no construtor da Intent. A constante ACTION_VIEW é necessária para indicar que uma ação será executada.
   Agora basta chamar o método StartActivity.
   Para evitar mensagem de erro do celular, caso se digite um endereço errado, coloquei o trecho num try catch e capturei o erro utilizando para mostrar uma mensagem a classe Toast.   Detalhe: Se você digitar, neste exemplo, uma página válida mas sem o http ele falhará.
   
   Criando um email:
   Para o email o código muda um pouco. Aqui coloquei a constante ACTION_SENDTO e crio uma uri contendo o destinatário, digitado na tela, "mail to". Para iniciar o email lançamos a opção de escolha dos aplicativos de email que houver.
   Bom, espero ter ajudado.
   Até a próxima!
   

Nenhum comentário:

Postar um comentário