如何通过Android应用程序将数据发送到蓝牙打印机? [英] How to send data to bluetooth printer via android app?

查看:86
本文介绍了如何通过Android应用程序将数据发送到蓝牙打印机?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个应用程序,它将通过蓝牙将数据发送到打印机以进行打印(用于收据的热敏打印机).我遵循了此链接中的代码.

I am developing an app which will send data to a printer via bluetooth to print (A thermal printer for receipts). I have followed the code which in this link.

http://pastie.org/6203514 ,此链接也当我将数据发送到打印机时,我能够看到设备及其MAC地址及其名称(打印机上的LED指示灯停止闪烁并变为标准状态,即打印机已与Android手机连接),但是当我发送的数据不是正在打印,也没有给出任何错误.我在Google上搜索了很多,发现了很多代码,并尝试了所有代码集,但无法打印.

I am able to see the device and its MAC Address and its name, when I send the data to the printer (the light LED on the printer stops blink and becomes standard i.e the printer is connected with my android phone) but when I send the data it is not printing and nor it is giving any error also. I have googled a lot and I found many codes and tried all set of codes but could not able to print .

请任何人可以帮助我离开这里.我听说使用Intents可以轻松完成,但是使用Intents无法获得确切的解决方案.

Please any one could help me out of here. I heard with Intents it can be done easily but could not get the exact solution with Intents.

任何帮助将不胜感激 在此先感谢

Any help would be appreciated Thanks in Advance

Ganesh

推荐答案

最后,我自己解决了这个问题,问题是我发送给打印机的标头字节才是真正的罪魁祸首.实际上,我正在发送170,1(其中170是打印机必须接收的第一个字节,第二个字节是打印机ID,我的意思是一些打印机端口,这两个值由打印机控制卡设计人员提供).实际上,我必须发送170,2,其中2是打印机ID,这样它才能给出正确的打印,并且对于每台打印机,通常都基于其控制卡发送数据.

Finally I solved this problem by my self and the problem is that the header byte which I am sending to the printer is the real culprit. Actually I am sending 170,1 (where 170 is the first byte that the printer must receive and the second byte is the printer id I mean some com port which these two values are given by Printer control card designer). Actual I have to send 170,2 where 2 is the Printer Id so that it gives the correct print and for every printer it is common of sending the data based on their control card's.

感谢很多朋友,这是我的代码,您可以将这些代码用于所有类型的打印机(用于POS热敏打印机)

Thanks a lot friends and here is my code that u can use these code for all types of printers(for POS-Thermal Printers)

public void IntentPrint(String txtvalue)
{
    byte[] buffer = txtvalue.getBytes();
    byte[] PrintHeader = { (byte) 0xAA, 0x55,2,0 };
    PrintHeader[3]=(byte) buffer.length;
    InitPrinter();
    if(PrintHeader.length>128)
    {
        value+="\nValue is more than 128 size\n";
        txtLogin.setText(value);
    }
    else
    {
        try
        {
            for(int i=0;i<=PrintHeader.length-1;i++)
            {
                mmOutputStream.write(PrintHeader[i]);
            }
            for(int i=0;i<=buffer.length-1;i++)
            {
                mmOutputStream.write(buffer[i]);
            }
            mmOutputStream.close();
            mmSocket.close();
        }
        catch(Exception ex)
        {
            value+=ex.toString()+ "\n" +"Excep IntentPrint \n";
            txtLogin.setText(value);
        }
    }
} 

剩下的代码:

public void InitPrinter()
{
    try
    {
        if(!bluetoothAdapter.isEnabled())
        {
           Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
           startActivityForResult(enableBluetooth, 0);
        }

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

        if(pairedDevices.size() > 0)
        {
            for(BluetoothDevice device : pairedDevices)
            {
                if(device.getName().equals("Your Device Name")) //Note, you will need to change this to match the name of your device
                {
                    mmDevice = device;
                    break;
                }
            }

            UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); //Standard SerialPortService ID
            //Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
            //mmSocket = (BluetoothSocket) m.invoke(mmDevice, uuid);
            mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
            bluetoothAdapter.cancelDiscovery();
            if(mmDevice.getBondState()==2)
            {
                mmSocket.connect();
                mmOutputStream = mmSocket.getOutputStream();
            }
            else
            {
                value+="Device not connected";
                txtLogin.setText(value);
            }
        }
        else
        {
            value+="No Devices found";
            txtLogin.setText(value);
            return;
        }
    }
    catch(Exception ex)
    {
        value+=ex.toString()+ "\n" +" InitPrinter \n";
        txtLogin.setText(value);
    }
}

这篇关于如何通过Android应用程序将数据发送到蓝牙打印机?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆