Android蓝牙打印

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android蓝牙打印相关的知识,希望对你有一定的参考价值。

我正在编写一个将数据发送到蓝牙打印机的应用程序。谁能帮我 ?如何使用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() + "
"
                    + 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()那么数据只打印一次..我不会能够第二次打印数据,直到我重新启动手机的蓝牙。

任何人都可以解决它?还是有其他方法可以摆脱这种印刷?

答案

我得到了问题的解决方案......

如果我想打印数据超过一次,那么你不需要与设备创建新的套接字连接...而是调用outputstream.write(bytes)方法。

最后,如果要断开设备,请调用mBTScoket.close()方法断开设备。

另一答案

您可以将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)
另一答案

如果您已连接到设备并将其配对。

所以对于打印,打印机需要字节。所以我创建了一个方法。

只需调用此方法并将String传递给它即可打印。

String str = new String("This is the text sending to the printer");

private void printData() {
    // TODO Auto-generated method stub

    String newline = "
";
    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进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

Android开发之蓝牙连接打印机

通过 Android 蓝牙打印机打印图像

如何在 Android 的蓝牙打印机上打印图像?

Android pad 连接蓝牙打印机Gprinter---实现蓝牙打印功能

Android 蓝牙 LE - 读取浮动特性