У меня есть портативный Bluetooth-принтер, с которым я могу связаться с помощью SPP-соединения с моего Mac (с помощью Coolterm). Когда я Я пытаюсь сделать то же самое с Android (используя платформу 7). У меня несколько проблем:
Похоже, принтер не поддерживает / не требует аутентификации по PIN-коду. При подключении из OSX я просто выбрал опцию «Не использовать штырь», и она соединилась. В Android, когда я использую device.createRfcommSocketToServiceRecord ()
, он всегда заканчивает тем, что запрашивает у меня PIN-код / ключ (который у меня нет / нужен).
Я решил это с помощью трюка с отражением:
Метод m = device.getClass (). GetMethod ("createInsecureRfcommSocket", new Class [] {int.class});
BluetoothSocket connection = (BluetoothSocket) m.invoke (device, 1);
Я не уверен, действительно ли это сработало, но мигающий светодиод на принтере перестает мигать, что заставляет меня думать, что это так.
Когда у меня есть сокет, я пытаюсь записать байтовые данные в поток, используя:
byte [] buffer = new byte [3];
buffer [0] = (byte) 0x8A; { {1}} buffer [1] = (байт) 0xC1;
buffer [2] = (byte) 0x04;
outStream.write (buffer);
int response = inStream .read ();
mySocket.close ();
При отправке той же трехбайтовой последовательности из Coolterm в OSX на принтере печатается тестовая страница. Однако это, похоже, заставляет поток зависать на Android (чтение).
Что-то я здесь упускаю?
РЕДАКТИРОВАТЬ: Кажется, это работает, только когда я устанавливаю канал на 1. Это означает, что я кое-что понял.