Автоматическое (Bluetooth-соединение) с Windows 7 и мобильным телефоном

В настоящее время я программирую USB-ключ Bluetooth на C# 2010. Я хочу запрограммировать его так, чтобы он автоматически связывался с найденным устройством Bluetooth. Я не хочу, чтобы пользователь вручную принимал запрос на сопряжение как в мобильном телефоне, так и в Windows 7. Я использую свой телефон (X Peria S) для проверки этого. Возможен ли этот метод программирования? Я пытался закодировать это с помощью библиотеки 32feet.net для Bluetooth, вот мой код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using InTheHand.Net;
using InTheHand.Net.Bluetooth;
using InTheHand.Net.Sockets;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

    private Guid service = BluetoothService.BluetoothBase;
    private BluetoothClient bluetoothClient;




    public Form1()
    {
        InitializeComponent();
    }

    private void Search_Bluetooth(object sender, EventArgs e)
    {
        BluetoothRadio.PrimaryRadio.Mode = RadioMode.Discoverable;
        bluetoothClient = new BluetoothClient();
        Cursor.Current = Cursors.WaitCursor;

        BluetoothDeviceInfo [] bluetoothDeviceInfo = bluetoothClient.DiscoverDevices(10);
        comboBox1.DataSource = bluetoothDeviceInfo;
        comboBox1.DisplayMember = "DeviceName";
        comboBox1.ValueMember = "DeviceAddress";
        comboBox1.Focus();
        Cursor.Current = Cursors.Default;
    }

    private void Pair(object sender, EventArgs e)
    {
        if (comboBox1.SelectedValue != null)
        {
            try
            {
                bluetoothClient.Connect(new BluetoothEndPoint((BluetoothAddress)comboBox1.SelectedValue, service));
                MessageBox.Show("Connected");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);


            }
        }
    }
}
}

Когда я запускаю этот проект, я вижу список устройств Bluetooth в окружении, но когда я хочу соединиться с ним, я получаю сообщение об ошибке "Попытка подключения не удалась, потому что подключенная сторона не отвечала должным образом в течение определенного периода времени"

Я думаю, что проблема в частной службе Guid = BluetoothService.BluetoothBase, но я не уверен, использую ли я правильный сервис.BluetoothBase для сопряжения с моим телефоном?

Есть ли какое-либо существующее решение для этого? Любая помощь и предложение высоко ценится.

Благодарю.

2 ответа

Вы должны знать ПИН-код для вашего ключа, который будет запрашиваться во время аутентификации.

Если вы хотите подключиться, например, к мобильному Bluetooth-ключу RS-232, вам нужно знать PIN-код, но вам не нужно принимать соединение на удаленном устройстве (RS-232) из-за отсутствия пользовательского интерфейса., Но на мобильном телефоне вы должны.

Я написал следующий интерфейс:

interface IStackAdapter
{
    IList<IRemoteBTDevice> DiscoveredDevices { get; }
    void LoadStack();
    void DoInquiry();
    void DoConnection(IRemoteBTDevice rd);
    void ReleaseLink();
}

Затем я реализовал этот интерфейс для каждого отдельного стека Bluetooth. Вот соединение для стека Widcomm:

/// <summary>
/// Connects to a remote device.
/// </summary>
/// <param name="rd">Remote device that the adapter is supposed to connect to.</param>
public void DoConnection(IRemoteBTDevice rd)
{
    BluetoothAddress remoteAddress = new BluetoothAddress(Convert.ToInt64(rd.Id, 16));
    BluetoothDeviceInfo bdi = new BluetoothDeviceInfo(remoteAddress);

    try
    {
        if (!bdi.Authenticated)
        {
            string pair = rd.Pin; /* PIN for your dongle */
            bool paired = BluetoothSecurity.PairRequest(bdi.DeviceAddress, pair);
        }
    }
    catch (Exception ex)
    {
        //Log and rethrow
    } 
}

Если вы используете Windows Phone, вы можете использовать PeerFinder в Windows Phone для подключения:

PeerFinder.AlternateIdentities["Bluetooth:PAIRED"] = "";
        var available_devices = await PeerFinder.FindAllPeersAsync();
        HostName hostName = null;
        for (int i = 0; i < available_devices.Count; i++)
        {
            PeerInformation dispositivo = available_devices[i];
            if (dispositivo.DisplayName.ToUpper() == /*Name of you device */)
            {
                hostName = dispositivo.HostName;
                break;
            }
        }
        if (hostName != null)
        {
            var socket = new StreamSocket();
            await socket.ConnectAsync(hostName, "1");
        }
Другие вопросы по тегам