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:
Visual Studio Community 2015 ou Xamarin Studio
Emulador Android virtual ou físico (veja como emular usando o Vysor)
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
https://developer.xamarin.com/api/type/Android.App.AlertDialog/
https://developer.android.com/reference/android/app/Activity.html
https://developer.xamarin.com/api/type/Android.Widget.ProgressBar/