Как отправить данные на приложение bluetooth printer vai android?
Я разрабатываю приложение, которое будет отправлять данные на принтер через Bluetooth для печати (термопринтер для чеков). Я следовал за кодом, который в этой ссылке.
http://pastie.org/6203514 и эта ссылка также http://pastie.org/6203516
Я могу видеть устройство и его MAC-адрес и его имя, когда отправляю данные на принтер (светодиодный индикатор на принтере перестает мигать и становится стандартным, т. Е. Принтер подключен к моему телефону Android), но когда я отправляю данные не печатаются и не дают никаких ошибок. Я много гуглил, нашел много кодов и перепробовал весь набор кодов, но не смог распечатать.
Пожалуйста, кто-нибудь может мне помочь отсюда. Я слышал с Intents, что это можно сделать легко, но не смог найти точное решение с Intents.
Любая помощь будет оценена Спасибо заранее
Ganesh
2 ответа
Наконец я решил эту проблему самостоятельно, и проблема в том, что байт заголовка, который я отправляю на принтер, является настоящим преступником. На самом деле я отправляю 170,1 (где 170 - первый байт, который должен получить принтер, а второй байт - идентификатор принтера. Я имею в виду некоторый com-порт, эти два значения которого заданы конструктором платы управления принтером). На самом деле я должен отправить 170,2, где 2 - это идентификатор принтера, чтобы он давал правильную печать, и для каждого принтера обычно отправляют данные на основе их контрольной карты.
Большое спасибо, друзья, и вот мой код, который вы можете использовать этот код для всех типов принтеров (для POS-термопринтеров)
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);
}
}
Вы стремитесь к определенному протоколу печати? (для конкретного принтера?)
Если нет, и общий печать может быть выполнена на любом подключенном принтере, вы можете использовать этот фрагмент кода:
Напишите это, где вы хотите напечатать определенный файл / файлы:
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;
}
}
};
Удачи!