Переведите BT в режим обнаружения и примите соединение SPP в Xamarin Droid. - PullRequest
0 голосов
/ 16 мая 2018

это мое первое использование Bluetooth с Xamarin.
Мне нужно активировать «режим обнаружения» в моем приложении, а затем принимать входящие подключения от внешнего хост-устройства. Я прочитал несколько документов, но не могу понять, как их реализовать.

Может ли кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 17 мая 2018

Я нашел способ ..

Сначала откройте намерение перевести Bluetooth в режим обнаружения ...

var intent = new Intent(BluetoothAdapter.ActionRequestDiscoverable);
StartActivityForResult(intent, 0);

Затем используйте ListenUsingInsecureRfcommWithServiceRecord, чтобы перевести BT в режим прослушивания:

class BluetoothThread : Java.Lang.Thread
{
  BluetoothServerSocket _btServerSocket;
  BluetoothSocket       _btSocket;
  Stream                _inStream;
  Stream                _outStream;

  private static Java.Util.UUID uuid = Java.Util.UUID.FromString("00001101-0000-1000-8000-00805F9B34FB");

  public event EventHandler<String> OnStringReceived;

  public bool Cancel { get; set; } = false;

  public override void Run()
  {
    byte[] buffer = new byte[1024];
    int bytes;
    string _ReceivedStr;

    try
    {
      _btServerSocket =  
        BluetoothAdapter.DefaultAdapter.ListenUsingInsecureRfcommWithServiceRecord("Test.Droid", uuid);

      try
      {
        _btSocket = _btServerSocket.Accept();

        if (_btServerSocket != null)
          Log.Info("BluetoothThread", "CONNECTION SUCCEED!");

        _inStream = _btSocket.InputStream;
        _outStream = _btSocket.OutputStream;
      }
      catch (Java.IO.IOException e)
      {
        Log.Error("BluetoothThread", "accept() failed", e);
      }

      while (!Cancel)
      {
        // Read from the InputStream
        bytes = _inStream.Read(buffer, 0, buffer.Length);
        _ReceivedStr = Encoding.ASCII.GetString(buffer);

        OnStringReceived?.Invoke(this, _ReceivedStr);

        Log.Info("BluetoothThread", $"RECEIVED: {_ReceivedStr}");
      }

    }
    catch (Java.IO.IOException e)
    {
      Log.Error("BluetoothThread", "listen() failed", e);
    }

  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...