Необходимо распечатать чек на Bluetooth принтере (модель принтера http://scanlogic.kz/rpp02.html).
Пробовали с помощью стандартного примера который идет вместе Rad Studio "Classic Bluetooth Basic app", отправить текст на принтер, но вылетает ошибка
java.io.IOexception: read failed, socket migth closed or timeout, read ret:-1.
Необходимо подключиться к принтеру и отправить текст на него.
Данную задачу реализовали на Android Studio ниже код, Как реализовать эту задачу на любимой Delphi. Проект был создан на Delphi, но возникла проблема с печатью чеков по bluetooth.
Переделать весь проект на Android Studio нет времени и навыков.
Буду признателен за любую помощь.
Спасибо.
package info.tabsoft.mobileprinter;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;
public class MainActivity extends Activity {
//will show the status
TextView myLabel;
//will enable user to enter any text to be printed
EditText myTextbox;
EditText codePage;
//android built in classes for bluetooth operations
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
Thread workerThread;
byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
//we are going to have three buttons for specific functions
Button openButton = (Button) findViewById(R.id.open);
Button sendButton = (Button) findViewById(R.id.send);
Button closeButton = (Button) findViewById(R.id.close);
Button sendButton8859_1 = (Button) findViewById(R.id.send_8859_1);
Button sendButton8859_5 = (Button) findViewById(R.id.send_8859_5);
Button sendButtonUTF8 = (Button) findViewById(R.id.send_UTF8);
myLabel = (TextView) findViewById(R.id.label);
myTextbox = (EditText) findViewById(R.id.entry);
//open bluetooth connection
openButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
findBT();
openBT();
}
catch(IOException ex){}
}
}
);
//send data typed by the user to be printed
sendButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
sendData("");
}
catch(IOException ex){}
}
}
);
sendButton8859_1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
sendData("8859_1");
}
catch(IOException ex){}
}
}
);
sendButton8859_5.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
sendData("8859_5");
}
catch(IOException ex){}
}
}
);
sendButtonUTF8.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
try
{
sendData("UTF8");
}
catch(IOException ex){}
}
}
);
//close bluetooth connection
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
closeBT();
} catch (IOException ex) {
}
}
}
);
}
catch(NullPointerException e){e.printStackTrace();}
catch(Exception e){e.printStackTrace();}
}
//This will find a bluetooth printer device
void findBT()
{
try
{
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null)
{
myLabel.setText("No bluetooth adapter available");
}
if(!mBluetoothAdapter.isEnabled())
{
Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetooth, 0);
}
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if(pairedDevices.size() > 0)
{
for(BluetoothDevice device : pairedDevices)
{
//MP300 is the name of the bluetooth printer device
if(device.getName().equals("RPP02N"))
{
mmDevice = device;
break;
}
}
}
myLabel.setText("Bluetooth Device Found");
}
catch(NullPointerException e){e.printStackTrace();}
catch(Exception e){e.printStackTrace();}
}
//Tries to open a connection to the bluetooth printer device
void openBT() throws IOException{
try
{
Toast.makeText(getApplicationContext(), "Try to open Bluetooth", Toast.LENGTH_LONG).show();
//Standard SerialPortService ID
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
beginListenForData();
myLabel.setText("Bluetooth Opened");
}
catch(NullPointerException e){e.printStackTrace();}
catch(Exception e){e.printStackTrace();}
}
//After opening a connection to bluetooth printer device,
//we have to listen and check if a data were sent to be printed
void beginListenForData()
{
try
{
final Handler handler = new Handler();
//This is the ASCII code for a newline character
final byte delimiter = 10;
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(
new Runnable()
{
@Override
public void run()
{
while(!Thread.currentThread().isInterrupted() && !stopWorker)
{
try
{
int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0)
{
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(int i=0; i < bytesAvailable; i++)
{
byte b = packetBytes[i];
if(b == delimiter)
{
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "ISO-8859-5");
//final String data = new String(encodedBytes, "UTF-8");
readBufferPosition = 0;
handler.post(
new Runnable()
{
@Override
public void run()
{
myLabel.setText(data);
}
}
);
}
else {readBuffer[readBufferPosition++] = b;}
}
}
}
catch(IOException ex)
{
stopWorker = true;
}
}
}
}
);
workerThread.start();
}
catch(NullPointerException e){e.printStackTrace();}
catch(Exception e){e.printStackTrace();}
}
//This will send data to be printed by the bluetooth printer
void sendData(String param) throws IOException
{
try
{
Toast.makeText(getApplicationContext(), "Try to send data", Toast.LENGTH_LONG).show();
//the text typed by the user
String msg = myTextbox.getText().toString();
msg += "\n";
myLabel.setText("Not defined!!!");
if(param.equals("")){ mmOutputStream.write(msg.getBytes("Cp866")); myLabel.setText("Cp866"); }
if(param.equals("8859_1")){ mmOutputStream.write(msg.getBytes("8859_1")); myLabel.setText("8859-1"); }
if(param.equals("8859_5")){ mmOutputStream.write(msg.getBytes("8859_5")); myLabel.setText("8859_5"); }
if(param.equals("UTF8")){ mmOutputStream.write(msg.getBytes("UTF-8")); myLabel.setText("UTF-8"); }
}
catch(NullPointerException e){e.printStackTrace();}
catch(Exception e){e.printStackTrace();}
}
//Close the connection to bluetooth printer
void closeBT() throws IOException
{
try
{
stopWorker = true;
mmOutputStream.close();
mmInputStream.close();
mmSocket.close();
myLabel.setText("Bluetooth Closed");
}
catch(NullPointerException e){e.printStackTrace();}
catch(Exception e){e.printStackTrace();}
}
}
Вопрос
kanatshym
Здравствуйте!
Необходимо распечатать чек на Bluetooth принтере (модель принтера http://scanlogic.kz/rpp02.html).
Пробовали с помощью стандартного примера который идет вместе Rad Studio "Classic Bluetooth Basic app", отправить текст на принтер, но вылетает ошибка
java.io.IOexception: read failed, socket migth closed or timeout, read ret:-1.
Необходимо подключиться к принтеру и отправить текст на него.
Данную задачу реализовали на Android Studio ниже код, Как реализовать эту задачу на любимой Delphi. Проект был создан на Delphi, но возникла проблема с печатью чеков по bluetooth.
Переделать весь проект на Android Studio нет времени и навыков.
Буду признателен за любую помощь.
Спасибо.
package info.tabsoft.mobileprinter; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.Bundle; import android.app.Activity; import android.os.Handler; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Set; import java.util.UUID; public class MainActivity extends Activity { //will show the status TextView myLabel; //will enable user to enter any text to be printed EditText myTextbox; EditText codePage; //android built in classes for bluetooth operations BluetoothAdapter mBluetoothAdapter; BluetoothSocket mmSocket; BluetoothDevice mmDevice; OutputStream mmOutputStream; InputStream mmInputStream; Thread workerThread; byte[] readBuffer; int readBufferPosition; int counter; volatile boolean stopWorker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { //we are going to have three buttons for specific functions Button openButton = (Button) findViewById(R.id.open); Button sendButton = (Button) findViewById(R.id.send); Button closeButton = (Button) findViewById(R.id.close); Button sendButton8859_1 = (Button) findViewById(R.id.send_8859_1); Button sendButton8859_5 = (Button) findViewById(R.id.send_8859_5); Button sendButtonUTF8 = (Button) findViewById(R.id.send_UTF8); myLabel = (TextView) findViewById(R.id.label); myTextbox = (EditText) findViewById(R.id.entry); //open bluetooth connection openButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { findBT(); openBT(); } catch(IOException ex){} } } ); //send data typed by the user to be printed sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { sendData(""); } catch(IOException ex){} } } ); sendButton8859_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { sendData("8859_1"); } catch(IOException ex){} } } ); sendButton8859_5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { sendData("8859_5"); } catch(IOException ex){} } } ); sendButtonUTF8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { sendData("UTF8"); } catch(IOException ex){} } } ); //close bluetooth connection closeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { closeBT(); } catch (IOException ex) { } } } ); } catch(NullPointerException e){e.printStackTrace();} catch(Exception e){e.printStackTrace();} } //This will find a bluetooth printer device void findBT() { try { mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if(mBluetoothAdapter == null) { myLabel.setText("No bluetooth adapter available"); } if(!mBluetoothAdapter.isEnabled()) { Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBluetooth, 0); } Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); if(pairedDevices.size() > 0) { for(BluetoothDevice device : pairedDevices) { //MP300 is the name of the bluetooth printer device if(device.getName().equals("RPP02N")) { mmDevice = device; break; } } } myLabel.setText("Bluetooth Device Found"); } catch(NullPointerException e){e.printStackTrace();} catch(Exception e){e.printStackTrace();} } //Tries to open a connection to the bluetooth printer device void openBT() throws IOException{ try { Toast.makeText(getApplicationContext(), "Try to open Bluetooth", Toast.LENGTH_LONG).show(); //Standard SerialPortService ID UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid); mmSocket.connect(); mmOutputStream = mmSocket.getOutputStream(); mmInputStream = mmSocket.getInputStream(); beginListenForData(); myLabel.setText("Bluetooth Opened"); } catch(NullPointerException e){e.printStackTrace();} catch(Exception e){e.printStackTrace();} } //After opening a connection to bluetooth printer device, //we have to listen and check if a data were sent to be printed void beginListenForData() { try { final Handler handler = new Handler(); //This is the ASCII code for a newline character final byte delimiter = 10; stopWorker = false; readBufferPosition = 0; readBuffer = new byte[1024]; workerThread = new Thread( new Runnable() { @Override public void run() { while(!Thread.currentThread().isInterrupted() && !stopWorker) { try { int bytesAvailable = mmInputStream.available(); if(bytesAvailable > 0) { byte[] packetBytes = new byte[bytesAvailable]; mmInputStream.read(packetBytes); for(int i=0; i < bytesAvailable; i++) { byte b = packetBytes[i]; if(b == delimiter) { byte[] encodedBytes = new byte[readBufferPosition]; System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); final String data = new String(encodedBytes, "ISO-8859-5"); //final String data = new String(encodedBytes, "UTF-8"); readBufferPosition = 0; handler.post( new Runnable() { @Override public void run() { myLabel.setText(data); } } ); } else {readBuffer[readBufferPosition++] = b;} } } } catch(IOException ex) { stopWorker = true; } } } } ); workerThread.start(); } catch(NullPointerException e){e.printStackTrace();} catch(Exception e){e.printStackTrace();} } //This will send data to be printed by the bluetooth printer void sendData(String param) throws IOException { try { Toast.makeText(getApplicationContext(), "Try to send data", Toast.LENGTH_LONG).show(); //the text typed by the user String msg = myTextbox.getText().toString(); msg += "\n"; myLabel.setText("Not defined!!!"); if(param.equals("")){ mmOutputStream.write(msg.getBytes("Cp866")); myLabel.setText("Cp866"); } if(param.equals("8859_1")){ mmOutputStream.write(msg.getBytes("8859_1")); myLabel.setText("8859-1"); } if(param.equals("8859_5")){ mmOutputStream.write(msg.getBytes("8859_5")); myLabel.setText("8859_5"); } if(param.equals("UTF8")){ mmOutputStream.write(msg.getBytes("UTF-8")); myLabel.setText("UTF-8"); } } catch(NullPointerException e){e.printStackTrace();} catch(Exception e){e.printStackTrace();} } //Close the connection to bluetooth printer void closeBT() throws IOException { try { stopWorker = true; mmOutputStream.close(); mmInputStream.close(); mmSocket.close(); myLabel.setText("Bluetooth Closed"); } catch(NullPointerException e){e.printStackTrace();} catch(Exception e){e.printStackTrace();} } }0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.