Не удалось прочитать соединение Bluetooth, возможно, сокет закрыт или истекло время ожидания, считайте: - PullRequest
1 голос
/ 20 октября 2019

Я создаю приложение в Xamarin (приложение для Android), которое позволяет пользователю отправлять данные на свой телефон через соединение Bluetooth на другой телефон. Когда я нажимаю кнопку, он должен запустить bluetooth getAllPairedDevices, а затем openConnection, но когда он пытается подключиться, он переходит в исключение броска.

В этой строке задается переменная данных:

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

А затем это мой bluetoothкласс:

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

    }        
}

Поскольку я новичок в связи Bluetooth, я не совсем уверен, где проблема, я уже проверил несколько ответов, и android.library, но это так сложно, так что не повезло.


Также вопрос, как бы вы отправили простую строку с помощью этой настройки?

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