安卓蓝牙打印

11

我正在编写一个应用程序,它可以将数据发送到蓝牙打印机。有人能帮帮我吗?我该如何使用Android蓝牙堆栈进行打印?还是有任何外部API或SDK可供使用?

这里是我的搜索蓝牙设备的代码...

bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
registerReceiver(ActionFoundReceiver,
        new IntentFilter(BluetoothDevice.ACTION_FOUND));

private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent
                    .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            btArrayAdapter.add(device.getName() + "\n"
                    + device.getAddress());
            btArrayAdapter.notifyDataSetChanged();
        }
    }
};

这是我发送数据到打印机的代码...

BluetoothDevice mDevice = bluetoothAdapter.getRemoteDevice("00:15:FF:F2:56:A4");
Method m = mDevice.getClass().getMethod("createRfcommSocket",
        new Class[] { int.class });
mBTsocket = (BluetoothSocket) m.invoke(mDevice, 1);
System.out.println("Connecting.....");
mBTsocket.connect();
System.out.println("Connected");
OutputStream os = mBTsocket.getOutputStream();
os.flush();
os.write(Receipt.getBytes());
// mBTsocket.close();

当我写 socket.close() 时,数据无法打印到打印机上,因为在打印数据之前套接字连接已关闭。如果我不写 socket.close() ,则只能打印一次数据。如果不重新启动手机的蓝牙,则无法第二次打印数据。有没有人能为此提供解决方案?或者有没有其他方法来解决这个问题?


我想从我的安卓设备发送简单的文本到支持蓝牙的热敏打印机,但是我有点困惑如何将数据发送到那个蓝牙打印机。 - Nirav Bhandari
@NiravBhandari:我遇到了类似的问题。我的应用程序基本上做同样的事情。如果我能联系到你寻求帮助,那就太好了。谢谢。 :) - Swayam
3个回答

7

我解决了我的问题...

如果我想要多次打印数据,那么你不需要使用新的设备套接字连接... 只需调用outputstream.write(bytes)方法。

最后,如果您想断开设备连接,则调用mBTScoket.close()方法以断开设备连接。


太好了,请不要将我的答案标记为已接受。请标记您自己的答案,因为是您通过自己的努力解决了问题。 - Narendra Pal
你在 AndroidManifest.xml 文件中使用了哪个权限? - Zin Win Htet

3

您可以使用printooth库来连接任何打印机,printooth非常简单易用且有良好的文档支持, https://github.com/mazenrashed/Printooth

var printables = ArrayList<Printable>()
var printable = Printable.PrintableBuilder()  
    .setText("Hello World") //The text you want to print
    .setAlignment(DefaultPrinter.ALLIGMENT_CENTER)
    .setEmphasizedMode(DefaultPrinter.EMPHASISED_MODE_BOLD) //Bold or normal  
    .setFontSize(DefaultPrinter.FONT_SIZE_NORMAL)
    .setUnderlined(DefaultPrinter.UNDELINED_MODE_ON) // Underline on/off
    .setCharacterCode(DefaultPrinter.CHARACTER_CODE_USA_CP437) // Character code to support languages
    .setLineSpacing(DefaultPrinter.LINE_SPACING_60)
    .setNewLinesAfter(1) // To provide n lines after sentence
    .build()
printables.add(printable)
BluetoothPrinter.printer().print(printables)

我们能连接并打印A4纸吗? - Vijaya Varma Lanke
很遗憾,不行。 - Mazen Rashed

0
如果您已经连接到设备并配对成功。
因此,对于打印,打印机需要字节。所以我创建了一个方法。
只需调用此方法并将字符串传递给它即可打印。 String str = new String("这是要发送到打印机的文本");
private void printData() {
    // TODO Auto-generated method stub

    String newline = "\n";
    try {
        out.write(str.getBytes(),0,str.getBytes().length);
        Log.i("Log", "One line printed");
    } catch (IOException e) {
        Toast.makeText(BluetoothDemo.this, "catch 1", Toast.LENGTH_LONG).show();
        e.printStackTrace();
        Log.i("Log", "unable to write ");
        flagCheck = false;
    }
    try {
        out.write(newline.getBytes(),0,newline.getBytes().length);
    } catch (IOException e) {        
        Log.i("Log", "Unable to write the new line::");
        e.printStackTrace();
        flagCheck = false;
    }
    flagCheck = true;
}

谢谢你的回答,我无法连接打印机。我已经按照Android开发者网站上的说明尝试了一下...你能帮我解决如何将我的Android设备连接到打印机吗? - Nirav Bhandari
请回答我在这里提出的问题,以便我可以清楚地帮助您。您是否使用蓝牙搜索设备?您是否获取到蓝牙设备列表?您是否已经将两个蓝牙设备配对? - Narendra Pal
我已经根据您提供的要求编辑了搜索蓝牙并发送数据到蓝牙的代码,请您审核一下。 - Nirav Bhandari
我已经找到了解决方案...我已经回答了它...感谢您的支持。 - Nirav Bhandari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接