0

現在、C# 2010 で USB Bluetooth ドングルをプログラミングしています。見つかった Bluetooth デバイスと自動的にペアリングするようにプログラムしたいと考えています。ユーザーが携帯電話と Windows 7 の両方でペアリング要求を手動で受け入れることを望んでいません。これをテストするために自分の電話 (X Peria S) を使用しています。このプログラミング方法は可能ですか?Bluetooth用の32feet.netライブラリを使用してこれをコーディングしようとしました。これが私のコードです

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を使用していますか?

これに対する既存の解​​決策はありますか?どんな助けや提案も大歓迎です。

ありがとう。

4

2 に答える 2

1

認証中に要求されるドングルの PIN を知っている必要があります。

たとえば、モバイル 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
    } 
}
于 2013-05-10T15:40:57.063 に答える
0

Windows Phone を使用している場合は、Windows Phone の PeerFinder を使用して接続できます。

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");
        }
于 2015-07-19T00:42:34.970 に答える