Android上的蓝牙打印

时间:2011-03-08 07:45:57

标签: android printing bluetooth

我正在尝试使用Android蓝牙API从我的T-Mobile Pulse Mini手机打印到HP DeskJet 450wbt打印机。代码如下所示。连接失败,并显示“服务发现失败”。如果我尝试在许多其他线程中提到的创建套接字的替代方法,我会改为“Host is down”。

我认为BPP的UUID是正确的,但我不确定。打印机是配对设备,它已打开。我找不到我的手机的USB驱动程序(徽章华为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 个答案:

答案 0 :(得分:2)

我认为原因可能是您使用的Android上的蓝牙堆栈可能不支持BPP配置文件,如果您使用的是不支持BPP的标准Android版本。

套接字创建机制失败,因为打印机未实现SPP配置文件。 android示例依赖于要侦听的服务器端SPP能够从客户端连接。打印机肯定没有通用的SPP服务器监听。

答案 1 :(得分:1)

试试这个:

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);

答案 2 :(得分:0)

可以使用各种蓝牙配置文件,即HCRP,BPP,SPP,OPP,DirectPrinting等(参考:http://www.alanjmcf.me.uk/comms/bluetooth/Bluetooth%20Profiles%20and%2032feet.NET.html#_Toc266869878

尝试使用其他配置文件(UUID)尝试与打印机'socket.connect'... 也许你的Palm OS设备会使用另一个配置文件而不是BPP?

菲利普,对于您的打印机 - HP DeskJet 450wbt,您使用的是通用蓝牙适配器还是您专门为惠普打印机购买的产品?

或者您的打印机是否支持开箱即用的蓝牙,而无需插入蓝牙适配器?

也许你可以在这里回答我的问题: can generic Bluetooth dongle be used for printers that support printing over Bluetooth?

让我知道它是如何为你工作的。

答案 3 :(得分:0)

如果您的手机型号(此处为Android)内置支持蓝牙打印配置文件,则手机支持打印到蓝牙打印机。如果您没有在手机上看到任何设置/选项(例如,从内置照片库应用程序)打印到蓝牙打印机,那么手机很可能不支持蓝牙打印。

如果内置支持,则很少或根本没有机会添加支持;它必须来自设备制造商(这里是Android)。

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


要在Android上实施蓝牙配置文件支持,有一个名为“Sybase-iAnywhere-Blue-SDK-for-Android”的项目,它取代了Android的版本,并提供了所有接口到底层蓝牙配置文件和协议。使用此功能,可以使用此SDK提供的BPP配置文件,使用您的Android手机通过蓝牙进行打印。

有关详情,请参阅以下链接: 链接1: http://www.sybase.com/detail?id=1064424 链接2: http://www.sybase.com/products/allproductsa-z/mobiledevicesdks/bluetoothsdks