Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将BT置于可发现模式,并在Xamarin Droid中接受SPP连接_Android_Xamarin_Xamarin.forms_Bluetooth_Xamarin.android - Fatal编程技术网

Android 将BT置于可发现模式,并在Xamarin Droid中接受SPP连接

Android 将BT置于可发现模式,并在Xamarin Droid中接受SPP连接,android,xamarin,xamarin.forms,bluetooth,xamarin.android,Android,Xamarin,Xamarin.forms,Bluetooth,Xamarin.android,这是我第一次在Xamarin上使用蓝牙 我需要在应用程序中激活“可发现模式”,然后接受来自外部主机设备的传入连接。 我已经阅读了一些文档,但我不能很好地理解如何实施它。 有人能给我指一下正确的方向吗?我找到了路 首先打开一个意图,将蓝牙置于发现模式 var intent = new Intent(BluetoothAdapter.ActionRequestDiscoverable); StartActivityForResult(intent, 0); 然后,使用ListenusingSecu

这是我第一次在Xamarin上使用蓝牙
我需要在应用程序中激活“可发现模式”,然后接受来自外部主机设备的传入连接。 我已经阅读了一些文档,但我不能很好地理解如何实施它。

有人能给我指一下正确的方向吗?

我找到了路

首先打开一个意图,将蓝牙置于发现模式

var intent = new Intent(BluetoothAdapter.ActionRequestDiscoverable);
StartActivityForResult(intent, 0);
然后,使用ListenusingSecureRFCommwith服务记录将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);
    }

  }
}
class BluetoothThread:Java.Lang.Thread
{
BluetoothServerSocket btServerSocket;
蓝牙插座_btSocket;
河道内的河流;
河流外流;
私有静态Java.Util.UUID UUID=Java.Util.UUID.FromString(“00001101-0000-1000-8000-00805F9B34FB”);
公共事件事件处理程序OnStringReceived;
公共bool Cancel{get;set;}=false;
公共覆盖无效运行()
{
字节[]缓冲区=新字节[1024];
整数字节;
字符串_ReceivedStr;
尝试
{
_btServerSocket=
BluetoothAdapter.DefaultAdapter.ListenusingSecureRFCommwithServiceRecord(“Test.Droid”,uuid);
尝试
{
_btSocket=_btServerSocket.Accept();
如果(_btServerSocket!=null)
Log.Info(“BluetoothThread”,“连接成功!”);
_inStream=_btSocket.InputStream;
_扩展流=_btSocket.OutputStream;
}
捕获(Java.IO.ioe异常)
{
错误(“BluetoothThread”,“accept()失败”,e);
}
而(!取消)
{
//从输入流读取
字节=_inStream.Read(buffer,0,buffer.Length);
_ReceivedStr=Encoding.ASCII.GetString(缓冲区);
OnStringReceived?.Invoke(这个,_ReceivedStr);
Log.Info(“BluetoothThread”,收到$:{u ReceivedStr}”);
}
}
捕获(Java.IO.ioe异常)
{
错误(“BluetoothThread”,“listen()失败”,e);
}
}
}