Nesse artigo aprenderemos como fazer uma ligação telefônica, e ainda como preencher o controle ListView por uma entidade.  

Para fazer uma ligação precisamos de permissão do Sistema Operacional e para isso no arquivo AndroidManifest.xml devemos colocar a permissão android.permission.CALL_PHONE, veja sua implementação completa abaixo.

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      package="br.com.LigacaoPessoa"

      android:versionCode="1"

      android:versionName="1.0">

    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <activity android:name=".LigacaoPessoa"

                  android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application> 

      <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> 

    <uses-sdk android:minSdkVersion="7" />

</manifest>


Vamos começar criando uma entidade pessoa, conforme listagem abaixo.

public class EntidadePessoa {

 

      private int cdPessoa;

      private String Nome;

      private String Telefone;

     

      public String getTelefone() {

            return Telefone;

      }

      public void setTelefone(String telefone) {

            Telefone = telefone;

      }

      public int getCdPessoa() {

            return cdPessoa;

      }

      public void setCdPessoa(int cdPessoa) {

            this.cdPessoa = cdPessoa;

      }

      public String getNome() {

            return Nome;

      }

      public void setNome(String nome) {

            Nome = nome;

      }

     

      public EntidadePessoa(int cdPessoa, String Nome, String Telefone)

      {

            this.cdPessoa=cdPessoa;

            this.Nome = Nome;      

            this.Telefone = Telefone;

      }

     

      @Override

      public String toString() {

            // TODO Auto-generated method stub

            return cdPessoa + "-" + Nome + "-" + Telefone;

      }

}

 

Logo em seguida criaremos a classe pessoa que fará o preenchimento das mesmas.

import java.util.ArrayList;

import java.util.List;

 

public class Pessoa {

 

      public List<EntidadePessoa> getPessoa()

      {

            EntidadePessoa pessoa1 = new EntidadePessoa(1, "Fernando", "123");

            EntidadePessoa pessoa2 = new EntidadePessoa(1, "Maria", "456");

            EntidadePessoa pessoa3 = new EntidadePessoa(1, "José","789");

           

            List<EntidadePessoa> Pessoas = new ArrayList<EntidadePessoa>();

           

            Pessoas.add(pessoa1);

            Pessoas.add(pessoa2);

            Pessoas.add(pessoa3);

           

            return Pessoas;

      }

}

No arquivo layout/main.xml, deveremos inserir o controle ListView, veja seu código abaixo.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView 

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/hello"

    />

<ListView android:id="@+id/listPessoas"

              android:layout_width="fill_parent"

              android:layout_height="wrap_content"></ListView>

</LinearLayout>


         

Na classe que representa a tela e a implementação de um Activity, inserimos o código abaixo.

import java.util.List;

import android.app.Activity;

import android.content.ActivityNotFoundException;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.util.Log;

import android.view.ContextMenu;

import android.view.MenuItem;

import android.view.View;

import android.view.ContextMenu.ContextMenuInfo;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemLongClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListView;

 

public class LigacaoPessoa extends Activity {

     

      private List<EntidadePessoa> Pessoas ;

    private int _posicao;

     

      /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);       

      

        final ListView listaPessoas = (ListView)findViewById(R.id.listPessoas);

   

        Pessoa pessoa = new Pessoa();

       

       Pessoas = pessoa.getPessoa();

      

       // adapter que sera o source para a listview

        ArrayAdapter<EntidadePessoa> adapter = new ArrayAdapter<EntidadePessoa>(this,android.R.layout.simple_list_item_1, Pessoas);

       

        //seta o adapter para o listview

        listaPessoas.setAdapter(adapter);

       

        //evento para o click

        listaPessoas.setOnItemLongClickListener(new OnItemLongClickListener() {

 

                  @Override

                  public boolean onItemLongClick(AdapterView<?> arg0, View arg1,

                             int posicao, long id) {

                        _posicao = posicao;

                        // TODO Auto-generated method stub

                        //registra o menu após o click

                        registerForContextMenu(listaPessoas);

                        return false;

                  }

        });

    }

   

    @Override

    public void onCreateContextMenu(ContextMenu menu, View v,

            ContextMenuInfo menuInfo) {

      // TODO Auto-generated method stub

      super.onCreateContextMenu(menu, v, menuInfo);

       //cria o menu para fazer a ligação     

      menu.add(0,0,0, "Ligar");

    }

   

    @Override

    public boolean onContextItemSelected(MenuItem item) {

      // TODO Auto-generated method stub

     

      if(item.getItemId()==0)

      {

            try

            {  

                  //Tipos de chamadas

                  //ACTION_DIAL

                  //ACTION_CALL

                 

                  Intent chamada = new Intent(Intent.ACTION_DIAL);

           

                  //pega a posição da pessoa

                  chamada.setData(Uri.parse("tel:" + Pessoas.get(_posicao)));

                  startActivity(chamada);

            }

            catch(ActivityNotFoundException act)

            {

                  Log.e("Exemplo de chamada", "falha", act);

            }

      }

     

      return super.onContextItemSelected(item);

 

    }

}

Após executarmos a aplicação devemos ter o resultado conforme imagem abaixo.




Ao clicar em um nome na listagem veremos o menu com a opção Ligar, conforme imagem abaixo.



No método onContextItemSelected da classe LigacaoPessoa, criamos um Intent passando no seu construtor o tipo de ligação,  ACTION_DIAL ou  ACTION_CALL. ACTION_DIAL abre a janela com a opção de alterar o telefone, já ACTION_CALL, faz a ligação direta, veja seus exemplos abaixo.



Espero que tenham gostado e até a próxima