#android #.net #xamarin #bluetooth #android-bluetooth
#Android #.net #xamarin #bluetooth #android-bluetooth
Вопрос:
Я пытаюсь заставить приложение Xamarin получать около 10 Кбит / с данных SPP через Bluetooth с нашей пользовательской печатной платы. Модуль BC127 на печатной плате может отправлять пакеты с максимальным размером 255 байт, поэтому приложение должно получать пакет каждые ~ 25 мс. Я использую пакеты для разделения данных, поэтому их нужно получать по одному за раз.
Тестовое приложение постоянно пытается получить данные, однако иногда, когда оно возвращается в начале метода приема, в потоке приема ожидают более 2 пакетов. Мой вопрос в том, что вызывает огромные задержки в моем методе приема Bluetooth? Я приложил метод ниже. После подключения к модулю Bluetooth приложение ничего не делает, кроме запуска этого метода в цикле while (true).
public byte[] ReadBluetoothPacket()
{
int bytesAvailable = 0;
while (bytesAvailable == 0) // Wait for packet to arrive
{
bytesAvailable = stream.BaseInputStream.Available(); // Find out how big the packet is
}
byte[] result = new byte[bytesAvailable];
_socket.InputStream.Read(result, 0, bytesAvailable); // Add the bytes to the buffer
return resu<
}
Ответ №1:
Я полагаю, что проблема была связана с тем, что ОС Android выполняла фоновые задачи, которые задерживали мой поток приема. Поскольку оказалось, что это только временная проблема, переписывание приемника данных для одновременной обработки нескольких пакетов решило ее.