Efetuando ligações a partir de aplicações para Windows Phone

Veja neste artigo como efetuar ligações telefônicas a partir de suas próprias aplicações para Windows Phone.

Quando desenvolvermos aplicações para dispositivos móveis, sejam para Android, iOS, Windows Phone, BlackBerry ou qualquer outra plataforma, é comum (e natural) querer (e precisar) utilizar os recursos do aparelho, tais como câmera, acelerômetro, entre outros.

Por mais que não se implemente tais funcionalidades inicialmente, não demora muito até o cliente solicitar alguma alteração nesse sentido. E por se tratar de um smartphone (no fundo, um celular), não é de se estranhar se nos for solicitado que o usuário possa efetuar ligações a partir da aplicação, sem precisar minimiza-la e acessar a lista de contatos ou a menu de chamadas telefônicas.

Com base nisso, este artigo explicará como realizar ligações a partir de aplicações próprias para Windows Phone. Aqui será utilizada a linguagem C# e a versão escolhida será a 7.x, de forma que o a aplicação aqui desenvolvida possa ser executada tanto no Windows Phone 7, quanto no 8.

Leia também: Rumo ao Desenvolvimento Mobile - Iniciação com Windows Phone

Iniciando a aplicação

Inicialmente devemos acessar o menu FILE > New > Project... no Visual Studio (nesse caso, o 2012 com o SDK para Windows Phone devidamente instalado). Na categoria Windows Phone, selecionamos o template Windows Phone App e na caixa de diálogo que será exibida, devemos selecionar a opção Windows Phone OS 7.1, conforme explicado anteriormente.

Na página inicial, MainPage.xaml, vamos inserir alguns controles que darão forma à nossa aplicação. O Grid de nome ContentPanel deve ficar como o código constante na Listagem 1, que insere um ListBox e um Button que serão utilizados posteriormente.

<!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <StackPanel> <ListBox x:Name="lbxClientes"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Path=Nome}" FontSize="30"/> <TextBlock Text="{Binding Path=Telefone}" FontSize="20"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <Button x:Name="btnLigar" Content="Ligar"/> </StackPanel> </Grid>
Listagem 1. Código XAML inserido na página principal

Essa ListBox será utilizada para listar alguns objetos que criaremos a seguir, simulando uma lista de clientes de uma aplicação comercial qualquer. Clicando no botão Ligar, o usuário poderá efetuar uma chamada para o telefone do cliente selecionado na lista.

Criemos então uma nova classe chamada Cliente, clicando com a direita no projeto, no Solution Explorer, e em Add > Class. Essa classe possuirá apenas dois atributos: nome e telefone, conforme vemos na Listagem 2.

public class Cliente { private string _nome; private string _telefone; public string Nome { get { return _nome; } set { _nome = value; } } public string Telefone { get { return _telefone; } set { _telefone = value; } } }
Listagem 2. Classe Cliente

Em seguida, no evento Loaded da MainPage, vamos instanciar alguns clientes e lista-los na ListBox. O código para realizar tal tarefa é apresentado na Listagem 3.

private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e) { List<Cliente> clientes = new List<Cliente>(); clientes.Add(new Cliente() { Nome = "José", Telefone = "32322323" }); clientes.Add(new Cliente() { Nome = "Maria", Telefone = "87123456" }); clientes.Add(new Cliente() { Nome = "Carlos", Telefone = "91987654" }); lbxClientes.ItemsSource = clientes; }
Listagem 3. Evento Loaded da página MainPage

Executando a aplicação no emulador já podemos ver os clientes listados, conforme ilustra a Figura 1.

Figura 1. Clientes listados na ListBox

Agora precisamos implementar o evento Click do botão Ligar, dando duplo clique sobre o mesmo no design, o que deve nos levar ao código C# da página. O código desse evento deve ficar como mostrado na Listagem 4, a seguir.

private void btnLigar_Click(object sender, RoutedEventArgs e) { Cliente cliente = (Cliente)lbxClientes.SelectedItem; PhoneCallTask ligacao = new PhoneCallTask() { DisplayName = cliente.Nome, PhoneNumber = cliente.Telefone }; ligacao.Show(); }
Listagem 4. Evento Click do botão Ligar

No código acima utilizamos a classe PhoneCallTask, responsável por realizar ligações a partir da nossa aplicação. Ao invocar o método Show, o usuário é questionado se deseja realmente efetuar uma ligação para o número selecionado. Essa confirmação é necessária pois ao efetuar uma ligação, o cliente será cobrado por isso, de acordo com os serviços da sua operadora de telefonia móvel.

Podemos agora executar a aplicação, selecionar um cliente na lista e pressionar o botão Ligar. A Figura 2 ilustra essa ação.

Figura 2. Ligando para o número selecionado

Aceitando a solicitação e pressionando o botão call (ligar), a ligação é iniciada normalmente, como se vê na Figura 3.

Figura 3. Ligação em andamento

Conclusão

Esse tipo de funcionalidade é muito comum em aplicações para dispositivos móveis e, muitas vezes, pode até se apresentar como um diferencial, pois tende a facilitar a vida do usuário, que não precisará sair da aplicação para ligar para um número que está ali na sua tela.

Como vimos, a responsável pelo serviço é a classe PhoneCallTask do namespace Microsoft.Phone.Tasks. Essa classe recebe os valores para os atributos DisplayName e PhoneNumber, que representam, respectivamente, o nome e o número para o qual se deseja ligar.

Caso o número discado já esteja registrado na lista de contatos do usuário, o nome que será exibido durante a ligação (Figura 3) será o do contato salvo na agenda e não o nome informado na propriedade DisplayName do objeto PhoneCallTask.

Outro ponto importante é que o formato do número informado deve ser válido, caso contrário, a ligação não poderá ser efetuada.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados