Связь Bluetooth с несколькими устройствами с использованием SPP - PullRequest
1 голос
/ 30 сентября 2010

Я мог бы подключиться к двум устройствам с мобильного телефона на базе Android одновременно, используя SPP, но как только я включил поток ввода (например, socket.getInputStream ()), одно из них вернет 0 в потоке, то есть данные недоступны в потоке. Например, поток A (thA) и поток B (thB) подключены к устройству A (devA) и устройству B (devB) соответственно. Таким образом, thA использует входной поток A (inA) для получения данных от devA, thB использует входной поток B (inB) для получения данных от devB. Следующим образом: devA ---> inA ---> thA devB ---> inB ---> thB Работает нормально, если я подключаюсь к каждому устройству отдельно. Однако в случае одновременного подключения двух устройств данные только о inA или inB имеют на нем данные.

Если это случится с вами, пожалуйста, поделитесь со мной своим опытом, я был бы очень признателен !! Заранее спасибо. YT

1 Ответ

0 голосов
/ 30 сентября 2010
  1. Почему вы используете отражение для createRFCommSocket?device.getClass (). getMethod ("createRfcommSocket", new Class [] {int.class});

в отличие от

        try {mBTSocket = mBTDevice.createRfcommSocketToServiceRecord(UUID_RFCOMM_GENERIC);
        } catch (Exception e1) {
            msg ("connect(): Failed to bind to RFCOMM by UUID. msg=" + e1.getMessage());
            return false;
        }

Отражение легко может бытьисточник проблем.Если нет причин использовать его, то избегайте его любой ценой.

Более того, если вызов getClass завершится неудачно, ваша переменная "m" будет нулевой, и вы не будете ловить эту ситуацию.Вы должны также обобщать свое исключение, вместо того, чтобы использовать конкретные исключения, просто используйте «Исключение», как в моем фрагменте кода выше.Это гораздо проще, чем добавить уловку для каждого возможного типа исключения, которое может быть сгенерировано.

  1. Я не совсем понимаю, что вы делаете с обработчиками, это не имеет смысламне.Можете ли вы удалить код обработчика для упрощения вещей?

  2. Слишком много сложностей.Уберите все отражения, дополнительные уловки.

  3. Хорошая практика кодирования - делать ваши методы одной страницей или меньше.Когда метод больше, чем страница, он слишком сложен, и это делает его чтение И отладку очень трудным.Уменьшите размер ваших методов, создав другие методы для выполнения распространенных задач.

  4. Отделите логику connect () от логики ввода-вывода.У вас должен быть метод для отправки данных и метод для получения данных, метод для connect ().Затем, когда все заработает, разбейте на части и создайте методы для высокоуровневого ввода-вывода для отправки и получения целых блоков данных.затем совершенствуйте эти методы и продолжайте расти.

в моем коде методы read, write, connect и ALL I / O занимают всего 1-20 строк каждый.Сделайте их очень простыми, потому что логика ввода-вывода лежит в основе вашего приложения, и она должна быть чистой, чистой, чистой.

...