C# 读取蓝牙连接失败,套接字可能已关闭或超时,读取重试:-1
我正在Xamarin(Android应用程序)中创建一个应用程序,允许用户通过蓝牙连接将手机上的数据发送到另一部手机。当我点击按钮时,它应该运行bluetooth getAllPairedDevices,然后打开连接,但当它尝试连接时,它进入抛出异常 此字符串设置数据变量:C# 读取蓝牙连接失败,套接字可能已关闭或超时,读取重试:-1,c#,android,xamarin,bluetooth,C#,Android,Xamarin,Bluetooth,我正在Xamarin(Android应用程序)中创建一个应用程序,允许用户通过蓝牙连接将手机上的数据发送到另一部手机。当我点击按钮时,它应该运行bluetooth getAllPairedDevices,然后打开连接,但当它尝试连接时,它进入抛出异常 此字符串设置数据变量: private string data = null; 这是我的呼叫按钮,用于检查是否有设备配对: Button btConnect = FindViewById<Button>(
private string data = null;
这是我的呼叫按钮,用于检查是否有设备配对:
Button btConnect = FindViewById<Button>(Resource.Id.connect);
btConnect.Click += (sender, e) =>
{
BluetoothManager manager = new BluetoothManager();
if (manager.getAllPairedDevices() != false)
{
System.Threading.Thread thread = new System.Threading.Thread(() =>
{
while (true)
{
data = manager.getDataFromDevice();
}
});
thread.IsBackground = true;
thread.Start();
}
};
由于我是蓝牙通信新手,我不确定问题出在哪里,我已经检查了多个答案,还有android.library,但它太复杂了,所以没有运气
还有一个子问题,您如何通过此设置发送简单字符串
public class BluetoothManager
{
// Unique ID for connecting
private const string UuidUniverseProfile = "00001101-0000-1000-8000-00805f9b34fb";
// Incomming bluetooth data from UART
private BluetoothDevice result;
// Input/Output stream of this communication
private BluetoothSocket mSocket;
// Convert byte[] to strings
private BufferedReader reader;
private System.IO.Stream mStream;
private InputStreamReader mReader;
public BluetoothManager()
{
reader = null;
}
private UUID getUUIDfromString()
{
return UUID.FromString(UuidUniverseProfile);
}
private void close(IDisposable connectedObject)
{
if (connectedObject == null) return;
try
{
connectedObject.Dispose();
}
catch (Exception ex)
{
throw ex;
}
connectedObject = null;
}
private void openDeviceConnection(BluetoothDevice btDevice)
{
try
{
// Getting socket from specific device
mSocket = btDevice.CreateRfcommSocketToServiceRecord(getUUIDfromString());
mSocket.Connect();
// Input stream
mStream = mSocket.InputStream;
// Output stream
//mStream.OutputStream;
mReader = new InputStreamReader(mStream);
reader = new BufferedReader(mReader);
System.Threading.Thread.Sleep(1000);
mSocket.Close();
}
catch (IOException ex)
{
close(mSocket);
close(mStream);
close(mReader);
throw ex;
}
}
public String getDataFromDevice()
{
return reader.ReadLine();
}
public bool getAllPairedDevices()
{
// Default android phone bluetooth
BluetoothAdapter btAdapter = BluetoothAdapter.DefaultAdapter;
var devices = btAdapter.BondedDevices;
if (devices != null && devices.Count > 0)
{
// All paired devices
foreach (BluetoothDevice mDevice in devices)
{
openDeviceConnection(mDevice);
}
return true;
}
else
{
return false;
}
}
}