通过蓝牙

时间:2018-06-13 11:07:28

标签: c# android wpf bluetooth 32feet

我正在开发一个WPF应用程序,能够通过蓝牙向Android设备发送和接收文本,图像和视频。我正在使用32feet.Net库。

目前,我可以使用ObexObjectPush服务发送和接收图像和视频,但我不知道使用哪种服务可以发送短信。

我已经制作了一个示例WPF应用程序,用于将文本发送到另一个WPF应用程序。我按照此link中指定的步骤操作。在那里,我在两个应用程序中使用相同的Guid作为服务ID。

现在,我的问题是我是否必须创建一个andriod应用程序,以实现相同的功能,它将使用相同的服务ID,并可以通过蓝牙发送和接收短信?

我尝试过SerialPort,但它没有用。

  using (var bluetoothClient = new BluetoothClient())
   {
        var endPoint = new BluetoothEndPoint(device.DeviceAddress, 
                         BluetoothService.SerialPort); 
         bluetoothClient.Connect(ep); // this line fails

         /*
          More code
        */
   }

1 个答案:

答案 0 :(得分:0)

我解决了使用32Feet通过蓝牙发送文本的问题。我只是为我的连接创建了一个GUID,并在两端(发送者/接收者)使用了相同的ID。我的发送者是Android客户端,接收者是WPF应用程序。我正在发送字符串作为字节流。这是代码:

self.client.put('/some/url', data={'symbol': symbol})

------------ Android客户端代码-------

 private void SetupBluetoothListner()
    {
        _messageServiceId = new Guid("{646171EA-EA18-4CCF-8D7A-C57D46991775}");
        _isBluetoothRecieverStarted = true;


        if (_cancelToken != null && _messageListener != null)
        {
            this.Dispose(true);
        }

        _cancelToken = new CancellationTokenSource();

        _messageListener = new BluetoothListener(_messageServiceId)
        {
            ServiceName = Constants.BluetoothStringMessageService
        };
    }



 private void BluetoothListener(CancellationTokenSource cancelToken, BluetoothListener bluetoothListener)
    {
        try
        {
            while (true)
            {
                using (var client = bluetoothListener.AcceptBluetoothClient())
                {
                    if (cancelToken.IsCancellationRequested)
                    {
                        return;
                    }

                    using (var streamReader = new StreamReader(client.GetStream()))
                    {
                        try
                        {
                          var content = streamReader.ReadToEnd();
                          if (!string.IsNullOrEmpty(content))
                          {
                             MessageReceiver(content);
                          }
                        }
                        catch (IOException ex)
                        {
                            client.Close();
                            break;
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, Constants.ErrorAtReceivingStringMessage, MessageBoxButton.OK);
        }
    }




   private bool SendData(Device device, byte[] content)
    {
        using (var bluetoothClient = new BluetoothClient())
        {
            try
            {
                var endpoint = new BluetoothEndPoint(device.DeviceInfo.DeviceAddress, _messageServiceId);
                bluetoothClient.Connect(endpoint);

                var bluetoothStream = bluetoothClient.GetStream();

                if (bluetoothClient.Connected && bluetoothStream != null)
                {
                    bluetoothStream.Write(content, 0, content.Length);
                    bluetoothStream.Flush();
                    bluetoothStream.Close();
                    return true;
                }

                return false;
            }
            catch (Exception ex)
            {
              // TODO: handle exception
            }
        }
        return false;
    }

我仍然陷入捕获使用ObexObjectPush发送的数据的问题。