Bluetooth-печать на Android - PullRequest
1 голос
/ 08 марта 2011

Я пытаюсь распечатать на принтере HP DeskJet 450 Вт с моего телефона T-Mobile Pulse Mini, используя Android Bluetooth API.Код, как показано ниже.Сбой соединения с «Обнаружение службы не удалось».Если я попробую альтернативный метод создания сокета, упомянутый в ряде других потоков, я получу вместо этого сообщение "Host is down".

Я думаю, что UUID для BPP правильный, но я не уверен.Принтер является сопряженным устройством, и он включен.Я не могу найти драйвер USB для своего телефона (под маркой Huawei 8110), поэтому я не смог отладить устройство или посмотреть журнал.Я застрял в этой точке, и я был бы благодарен за любой совет.

Вот краткий обзор моего кода:

final String UUID_BPP = "00001122-0000-1000-8000-00805F9B34FB";
final String printerName = "dj450 S/N SG..."; // name of paired printer

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (bluetoothAdapter == null) {
    return 2; // phone does not support Bluetooth
}

if (!bluetoothAdapter.isEnabled()) {
    return 3; // Bluetooth has not been enabled
}

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();

// Loop through paired devices
BluetoothDevice printer = null;

for (BluetoothDevice device : pairedDevices) {
    String s = device.getName();

    if (s.equals(printerName)) {
        printer = device;
        break;
    }
}

if (printer == null)
    return 4; // Paired printer not found

// create socket
UUID BPP = UUID.fromString(UUID_BPP);
BluetoothSocket socket;

try {
    socket = printer.createRfcommSocketToServiceRecord(BPP);
} catch (IOException e) {
    return 5; // Unable to create socket
}
/*
try {
    Method m = printer.getClass().getMethod("createRfcommSocket", 
        new Class[] { int.class });

    socket = (BluetoothSocket) m.invoke(printer, 1);
} catch (Exception e1) {
    return 5; // Unable to create socket
}
*/
try {
    socket.connect(); 
} catch (IOException e) {
    return 6; // Unable to connect socket
}

Ответы [ 4 ]

2 голосов
/ 08 марта 2011

Я думаю, причина может заключаться в том, что стек Bluetooth на используемом вами Android может не поддерживать профиль BPP, если вы используете стандартные версии Android, он не поддерживает BPP.

Механизм создания сокетовсбой, потому что принтер не реализует профиль SPP.Примеры для Android зависят от того, будет ли SPP на стороне сервера прослушивать, чтобы иметь возможность подключиться с клиента.У принтера наверняка не будет общего прослушивания SPP-сервера.

1 голос
/ 25 апреля 2011

Попробуйте это:

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);
0 голосов
/ 26 мая 2011

Если модель вашего телефона (в данном случае Android) имеет встроенную поддержку профиля печати Bluetooth, то телефон поддерживает печать на принтере Bluetooth.Если вы не видите никаких настроек / опций на своем телефоне для печати (например, из встроенных приложений фотогалереи) на принтер Bluetooth, то, по всей вероятности, телефон не поддерживает печать Bluetooth.

Если поддержка не встроена, у вас практически нет шансов добавить поддержку;он должен исходить от производителя устройства (здесь Android).

(Ref: http://discussion.forum.nokia.com/forum/showthread.php?76295-Bluetooth-printing-option-in-application)


Чтобы поддержка профиля Bluetooth была реализована на Android, существует проект под названием «Sybase-iAnywhere-Blue-SDK-for-Android », который заменяет версию Android и предоставляет все интерфейсы в базовые профили и протоколы Bluetooth. Благодаря этому печать через Bluetooth на телефоне Android будет возможна с использованием профиля BPP, предоставленногоSDK.

Для получения более подробной информации см. Ссылки ниже: ссылка 1: http://www.sybase.com/detail?id=1064424 Ссылка 2: http://www.sybase.com/products/allproductsa-z/mobiledevicesdks/bluetoothsdks

0 голосов
/ 26 мая 2011

Существуют различные профили Bluetooth, которые могут использоваться для печати, а именно: HCRP, BPP, SPP, OPP, DirectPrinting и т. Д. (Ref: http://www.alanjmcf.me.uk/comms/bluetooth/Bluetooth%20Profiles%20and%2032feet.NET.html#_Toc266869878)

Попробуйте эти другие профили (UUID), чтобы попробовать 'socket.connect' с принтером ... Возможно, ваше устройство Palm OS будет использовать другой профиль, чем BPP?

Кстати, Филипп, для вашего принтера - HP DeskJet 450wbt, вы используете универсальный ключ Bluetooth или что-то, что вы приобрели специально для вашего принтера у HP?

Или ваш принтер поддерживает Bluetooth из коробки, без необходимости подключать адаптер Bluetooth?

Возможно, вы можете ответить на мой вопрос здесь: можно ли использовать общий ключ Bluetooth для принтеров, поддерживающих печать через Bluetooth?

Дайте мне знать, как это работает для вас.

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