Подтвердить что ты не робот

Как отправить данные на Bluetooth-приложение vai android vai?

Я разрабатываю приложение, которое будет отправлять данные на принтер через Bluetooth для печати (термопринтер для квитанций). Я следил за кодом, который в этой ссылке.

http://pastie.org/6203514, и эта ссылка также http://pastie.org/6203516

Я могу видеть устройство и его MAC-адрес и его имя при отправке данных на принтер (световой индикатор на принтере перестает мигать и становится стандартным, т.е. принтер подключен к моему телефону Android), но когда Я отправляю данные, которые он не печатает, и также не дает никаких ошибок. У меня много googled, и я нашел много кодов и пробовал весь набор кодов, но не смог распечатать.

Пожалуйста, кто-нибудь может помочь мне уйти отсюда. Я слышал, что с Intents это можно сделать легко, но не смог получить точное решение с Intents.

Любая помощь будет оценена Спасибо в Advance

Ганеш

4b9b3361

Ответ 1

Наконец, я решил эту проблему самостоятельно, и проблема в том, что байт заголовка, который я отправляю на принтер, является настоящим виновником. На самом деле я отправляю 170,1 (где 170 - это первый байт, который должен получить принтер, а второй байт - это идентификатор принтера. Я имею в виду некоторый com-порт, который эти два значения заданы дизайнером карты управления принтером). Фактически я должен отправить 170,2, где 2 - это идентификатор принтера, чтобы он выдавал правильную печать, и для каждого принтера обычно отправляется информация на основе их контрольной карты.

Спасибо, много друзей, и вот мой код, который может использовать этот код для всех типов принтеров (для 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);
    }
}

Ответ 2

Вы ориентируетесь на определенный протокол печати? (для конкретного принтера?)

Если нет, и общий отпечаток можно сделать, чтобы подключить принтер, вы можете использовать этот фрагмент кода:

Запишите это, где вы хотите напечатать конкретный файл/файлы:

            Intent intent = Tools.getSendToPrinterIntent(
                    DisplayActivity.this, mPdfAsPictures,
                    mPrintCurrentIndex);

            // notify the activity on return (will need to ask the user for
            // approvel)
            startActivityForResult(intent, ACTIVITY_PRINT);

Это вспомогательный метод:

public static Intent getSendToPrinterIntent(Context ctx, String[] fileFullPaths, int indexToPrint){
    Intent sendIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);

    // This type means we can send either JPEG, or PNG
    sendIntent.setType("image/*");

    ArrayList<Uri> uris = new ArrayList<Uri>();

    File fileIn = new File(fileFullPaths[indexToPrint]);
    Uri u = Uri.fromFile(fileIn);
    uris.add(u);

    sendIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);

    return sendIntent;
}

И, наконец, вы получите ответ на:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == ACTIVITY_PRINT) {

        switch (resultCode) {
        case Activity.RESULT_CANCELED:
            Log.d(TAG(), "onActivityResult, resultCode = CANCELED");
            break;
        case Activity.RESULT_FIRST_USER:
            Log.d(TAG(), "onActivityResult, resultCode = FIRST_USER");
            break;
        case Activity.RESULT_OK:
            Log.d(TAG(), "onActivityResult, resultCode = OK");
            break;
        }
    }
};

Удачи!