segunda-feira, 26 de setembro de 2011

Detectar dispostivos Bluetooth em .NET


Neste post veremos como detectar dispostivos bluetooth através do C# utilizando um projeto WPF do Visual Studio 2008.
Criarei aqui um projeto WPF no Visual Studio 2008 onde será possível detectar dispositivos bluetooth.


Primeiro você deve baixar o arquivo que está no link abaixo:
Após baixar e instalar o aplicativo acima, você deve criar seu projeto e assim adicionar como referência:
Na aba “.NET”, escolha “InTheHand.Net.Personal”.
Crie uma classe chamada Dispositivo, com o seguinte código.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InTheHand.Net.Sockets;
namespace BluetoothClient
{
public class Dispositivo
{
public string NomeDoDispositivo { get; set; }
public uint Sap { get; set; }
public Dispositivo(BluetoothDeviceInfo dispositivo_info)
{
this.NomeDoDispositivo = dispositivo_info.DeviceName;
this.Sap = dispositivo_info.DeviceAddress.Sap;
}
public override string ToString()
{
return this.NomeDoDispositivo;
}
}
}
Esta classe cria dois atributos: NomeDoDispositivo e Sap sendo possível atribuir um valor à elas e/ou pegar este valor.
Também é criado um método que sobescreve (override) o método ToString() para retornar o nome do dispositivo.
Agora você deve criar os controles na tela.
Como este é um exemplo, não alterei os nomes dos controles, somente os adicionei.
-Button (button1)
-ListBox (listBox1)
-ProgressBar (progressBar1)


O código abaixo deve ser inserido no arquivo .cs da sua tela.
Neste código temos 4 procedimentos:
- Windows1
A função principal, a qual fará a chamada das funções.
- bg_RunWorkerCompleted
Irá inserir a lista de Dispositivos em nosso listBox ao fim do processo.
- bg_DoWork
Cria uma lista de Dispositivos a qual será “populada” com as suas informações (em nosso exemplo, NomeDoDispositivo e Sap).
- button1_Click
Este é o evento de clique do botão que irá “Buscar os dispositivos”, tornando visível a barra de progresso e chamando a função RunWorkerAsync.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
namespace BluetoothClient
{
///

/// Interaction logic for Window1.xaml
///

public partial class Window1 : Window
{
BackgroundWorker bg;
public Window1()
{
InitializeComponent();
bg = new BackgroundWorker();
bg.DoWork += new DoWorkEventHandler(bg_DoWork);
bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);
}
void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
listBox1.ItemsSource = (List<Dispositivo>)e.Result;
progressBar1.Visibility = Visibility.Hidden;
}
void bg_DoWork(object sender, DoWorkEventArgs e)
{
List<Dispositivo> devices = new List<Dispositivo>();
InTheHand.Net.Sockets.BluetoothClient bc = newInTheHand.Net.Sockets.BluetoothClient();
InTheHand.Net.Sockets.BluetoothDeviceInfo[] array = bc.DiscoverDevices();
int count = array.Length;
for (int i = 0; i < count; i++)
{
Dispositivo device = new Dispositivo(array[i]);
devices.Add(device);
}
e.Result = devices;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
if (!bg.IsBusy)
{
progressBar1.Visibility = Visibility.Visible;
bg.RunWorkerAsync();
}
}
}
}
Bom, agora você poderá compilar seu projeto (F5) e ver o resultado.
Lembrando que você deverá ter um dispositivo Bluetooth na máquina onde for executado o software, caso contrário aparecerá um erro.
Após clicar no botão, aguarde até 20 segundos para que sejam mostrados na lista os dispositivos bluetooth ativos.

2 comentários:

  1. Caro Matheus, achei seu código bastante interessante. Se me permitisse, queria usá-lo em meu TCC ? Entretanto, não consegui entender como fazê-lo, pois sou novato em C#. Caso não se importe que use seu código, gostaria de saber se não poderia passar-me o project do mesmo. Agradeço e sucesso em suas postagens!

    ResponderExcluir
  2. Caro Valmor,

    Pode ficar à vontade em usá-lo em seu TCC.

    ResponderExcluir