Xamarin Android - Fazendo chamadas telefônicas


Neste artigo vou mostrar com podemos fazer chamadas telefônicas diretamente de uma aplicação Android usando o Xamarin Android, o Visual Studio 2015 e a linguagem C#.

Muitas vezes nossas aplicações podem precisar fazer uma chamada telefônica diretamente sem precisar sair do contexto atual.

No exemplo deste artigo, para iniciar uma chamada diretamente a partir da nossa aplicação vamos utilizar uma instância de uma Intent.

Uma Intent ou intenção é um conceito abstrato para algum tipo de operação que deverá ser executada no sistema operacional Android.

Vamos criar uma instância da classe Intent() e a seguir usamos o método SetData() para definir os dados na qual a Intent esta operando.

Temos que garantir que o dispositivo tenha recursos de telefonia e podemos fazer isso de duas formas:

1- usar o atributo:

[Assembly: UsesFeature (Android.Content.PM.PackageManager.FeatureTelephony)]

Ou usar o método HasSystemFeature() em tempo de execução:

Var hasTelephony = PackageManager.HasSystemFeature (Android.Content.PM.PackageManager.FeatureTelephony);
If (hasTelephony)
{
      // faça alguma coisa
}

2- Se estivermos rodando em um dispositivo com recursos de telefonia, ainda precisamos ter permissão para iniciar chamadas telefônicas:

[Assembly: UsesPermission (Manifest.Permission.CallPhone)]


3- Após isso podemos fazer a chamada usando ação ActionCall da Intent :

var intent = new Intent(Intent.ActionCall);
intent.SetData(Uri.Parse("tel:" + editText.Text));
StartActivity(intent);

Vamos então aplicar esses conceitos na prática.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no VS Community 2015

Abra o VS 2015 Community e clique em New Project;

Selecione a linguagem Visual C# e o template Android -> Blank App(Android)

Informe o nome um nome adequado ao seu projeto, eu vou usar o nome Droid_Telefone, e clique no botão OK;

Abra o arquivo Main.axml na pasta Resources/layout no modo Designer e a seguir inclua uma caixa de texto usando o controle EditText e um Button.

Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XML gerado :

 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_orange_light">

    <EditText
        android:inputType="phone"
        android:textColor="@android:color/black"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:phoneNumber="true"
        android:hint="@string/telefone" />

    <Button
        android:text="@string/chamada"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/fazerChamada" />

</LinearLayout>

A seguir abra o arquivo strings.xml na pasta Resources/values e inclua o seguinte código:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="telefone">Informe o telefone</string>
  <string name="chamada">Fazer chamada</string>
</resources>

Agora estamos pronto para definir o código da atividade principal.

Definindo o código da MainActivity

Abra o arquivo MainActivity e inclua o código abaixo :

using Android.App;
using Android.Content;
using Android.Widget;
using Android.OS;
using Uri = Android.Net.Uri;
using Android;
using System;
[assembly: UsesPermission(Manifest.Permission.CallPhone)]
[assembly: UsesFeature(Android.Content.PM.PackageManager.FeatureTelephony)]
namespace Droid_Telefone
{
    [Activity(Label = "Droid_Telefone", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        EditText editText;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            editText = FindViewById<EditText>(Resource.Id.editText);
            Button btnChamada = FindViewById<Button>(Resource.Id.fazerChamada);
            if (!PackageManager.HasSystemFeature(Android.Content.PM.PackageManager.FeatureTelephony))
            {
                Toast.MakeText(this,"O dispositivo não suporta este recurso.",ToastLength.Short);
                return;
            }
            btnChamada.Click += BtnChamada_Click;
        }
        private void BtnChamada_Click(object sender, EventArgs e)
        {
            var intent = new Intent(Intent.ActionCall);
            intent.SetData(Uri.Parse("tel:" + editText.Text));
            StartActivity(intent);
        }
    }
}

Este código apenas referencia o arquivo de Layout Main.axml e define o evento Click para o botão btnChamada.

A seguir no tratamento do evento criamos uma Intent para iniciar a Intent Intent.ActionCall que executa uma chamada usando os dados definidos por SetData.

Executando o projeto usando o emulador Genymotion iremos obter o seguinte resultado:

Na primeira tela ao clicar no botão - Fazer Chamada - veremos a tela do discador ser aberta e o número informado ser discado

Você pode implementar facilmente outros recursos para personalizar o projeto.

Pegue o projeto aqui :   Droid_Telefone.zip    (sem as referências)

Jesus dizia, pois, aos judeus que criam nele: Se vós permanecerdes na minha palavra, verdadeiramente sereis meus discípulos;
E conhecereis a verdade, e a verdade vos libertará.

João 8:31,32

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti