Отправка текста, изображений и видео на устройство andriod из WPF через Bluetooth

Я разрабатываю приложение WPF, способное отправлять и получать текст, изображения и видео на устройства Android через Bluetooth. Я использую библиотеку 32feet.Net.

В настоящее время я могу отправлять и получать изображения и видео с помощью службы ObexObjectPush, но я не знаю, с помощью какой службы я могу отправлять текстовые сообщения.

Я сделал образец приложения WPF для отправки текста в другое приложение WPF. Я выполнил шаги, указанные в этом ссылка. В этом я использовал тот же Guid, что и идентификатор службы в обоих приложениях.

Теперь мой вопрос: нужно ли мне создавать приложение andriod для достижения того же, которое будет использовать тот же идентификатор службы и может отправлять и получать текстовые сообщения через Bluetooth?

Я пробовал SerialPort, но это не сработало.

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

         /*
          More code
        */
   }

person Mohit Bora    schedule 13.06.2018    source источник
comment
Единственный способ отправки текстовых сообщений — использование службы SMS/MMS, потому что нет возможности отправить текст, который появляется на устройстве, через Bluetooth (кроме отправки простого текстового файла). Для работы с SMS/MMS необходимо использовать профиль MAP (он не реализован в 32feet, но скоро будет доступен в нашей библиотеке). Другой способ — отправить файлы vCard или Vcal с информацией, которую вы хотите отобразить. Они хранятся в телефонной книге или в календаре. Но они не будут отображаться на дисплее до тех пор, пока пользователь не откроет их.   -  person Mike Petrichenko    schedule 13.06.2018


Ответы (1)


Я решил проблему с отправкой текста по Bluetooth с помощью 32Feet. Я просто создал GUID для своего соединения и использовал один и тот же идентификатор на обоих концах (отправитель/получатель). Мой отправитель был клиентом Android, а получатель - приложением WPF. Я отправляю строку как поток байтов. Вот код:

 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;
    }

------------ Код для клиента Android-------

 private UUID serviceUUID = UUID.fromString("0e6114d0-8a2e-477a-8502-298d1ff4b4ba");



public void OpenSocket(BluetoothDevice currentDevice)    {

    try {
        BluetoothSocket socket = currentDevice.createRfcommSocketToServiceRecord(serviceUUID);
        socket.connect();
        outputStream = socket.getOutputStream();
        inputStream = socket.getInputStream();
    }
    catch(Exception ex){

        Log.d("socket","socket" + ex.getMessage());
    }
}

public void SendData(String message) {

    try{
        outputStream.write(message.getBytes());
    }
    catch(Exception ex){

    }
}

Я все еще застрял в проблеме сбора данных, отправляемых с помощью ObexObjectPush.

person Mohit Bora    schedule 25.06.2018