Java 我的android应用程序每5秒只打印一张票
首先,感谢您花时间阅读我的问题。 在Java编程方面,我仍然是一个新手,我非常感谢任何建议或帮助 应用程序 我编写了一个小型android应用程序,它通过蓝牙打印机打印工作卡票据 问题 我的应用程序每5秒钟只能打印一张工单,这意味着如果在5秒钟内捕获第二张工单,应用程序不会打印工单 我想要什么 我真的希望应用程序连续打印出每一张工作卡的记录单 我想我在异步任务、线程(蓝牙通信)等的细节以及何时使用什么类中迷失了方向 任何关于如何使用这些类的最佳实践的指导方针都是非常受欢迎的。 我已经粘贴了一些源代码,我怀疑这可能是问题的根源 设备: Zebra RW420打印机(Zebra SDK) 日志上写着: 03-06 20:17:04.328:W/BluetoothAdapter(25552):getBluetoothService() 在没有Bluetooth Manager的情况下调用Callback 03-06 20:17:04.328: W/BluetoothAdapter(25552):调用getBluetoothService()时没有 Bluetooth Manager Callback 03-06 20:17:04.386:D/dalvikvm(25552): GC_并发释放133K,9%释放4079K/4468K,暂停17ms+23ms,总计 源代码: MainScreen.javaJava 我的android应用程序每5秒只打印一张票,java,android,printing,bluetooth,zebra-printers,Java,Android,Printing,Bluetooth,Zebra Printers,首先,感谢您花时间阅读我的问题。 在Java编程方面,我仍然是一个新手,我非常感谢任何建议或帮助 应用程序 我编写了一个小型android应用程序,它通过蓝牙打印机打印工作卡票据 问题 我的应用程序每5秒钟只能打印一张工单,这意味着如果在5秒钟内捕获第二张工单,应用程序不会打印工单 我想要什么 我真的希望应用程序连续打印出每一张工作卡的记录单 我想我在异步任务、线程(蓝牙通信)等的细节以及何时使用什么类中迷失了方向 任何关于如何使用这些类的最佳实践的指导方针都是非常受欢迎的。 我已经粘贴了一些源
public class MainScreen extends Activity {
submitBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//Do printing
String tpl = "Hello World!";
new PrintTask().execute(tpl);
}
});
}
//Async Printing Task
private class PrintTask extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
uiHelper.showLoadingDialog("Printing, please wait...");
}
@Override
protected String doInBackground(String... params) {
String msg = params[0];
print(msg);
publishProgress(1);
return "All Done!";
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
uiHelper.updateLoadingDialog("Printing jobcard " + values[0]);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
uiHelper.dismissLoadingDialog();
finish(); //close the window
}
}
public void print(String tpl) {
final String msg = tpl;
//runOnUiThread(new Runnable()
new Thread(new Runnable() {
public void run() {
Looper.prepare();
printer_ob.printMessage(msg);
Looper.loop();
Looper.myLooper().quit();
}
}).start();
}
}
我认为您必须使用
IntentService
而不是AsyncTask
。IntentService处理异步请求,还具有用于排队的内置功能。查看链接以获取有关IntentService的更多信息。您在整个代码中都有一大堆DemoSleep.sleep()
调用,听起来好像要在一段时间内阻止执行。它在open()
之后休眠1秒,然后在write()
之后休眠几秒钟,与打印机的通信肯定需要一些时间
这就是导致打印速度慢的原因吗?你能试着把它们去掉吗?打印时不需要它们谢谢,我会看一看。啊,是的,这不是我的代码,它是zebra SDK的一部分。我将删除它们,看看打印速度是否有所提高。好地方!
public class ZebraPrinterHelper {
Context context;
private ZebraPrinterConnection zebraPrinterConnection;
private RadioButton btRadioButton;
private ZebraPrinter printer;
private TextView statusField;
private EditText macAddress, ipDNSAddress, portNumber;
private Button testButton;
public ZebraPrinterHelper(Context c) {
context = c;
}
public ZebraPrinter connect() {
zebraPrinterConnection = null;
zebraPrinterConnection = new BluetoothPrinterConnection(SettingsHelper.getBluetoothAddress(context));
try {
zebraPrinterConnection.open();
} catch (ZebraPrinterConnectionException e) {
Toast.makeText(context, "Comm Error! Disconnecting", 500).show();
DemoSleeper.sleep(1000);
disconnect();
}
ZebraPrinter printer = null;
if (zebraPrinterConnection.isConnected()) {
try {
printer = ZebraPrinterFactory.getInstance(zebraPrinterConnection);
//setStatus("Determining Printer Language", Color.YELLOW);
PrinterLanguage pl = printer.getPrinterControlLanguage();
// setStatus("Printer Language " + pl, Color.BLUE);
} catch (ZebraPrinterConnectionException e) {
//"Unknown Printer Language");
Toast.makeText(context, "Error, Unknown printer language", 500).show();
DemoSleeper.sleep(1000);
printer = null;
DemoSleeper.sleep(1000);
disconnect();
} catch (ZebraPrinterLanguageUnknownException e) {
//setStatus("Unknown Printer Language", Color.RED);
Toast.makeText(context, "Error, Unknown printer language", 500).show();
printer = null;
DemoSleeper.sleep(1000);
disconnect();
}
}
return printer;
}
private void writeMessage(byte[] message) {
//message in bytes
try {
zebraPrinterConnection.write(message);
DemoSleeper.sleep(1500);
if (zebraPrinterConnection instanceof BluetoothPrinterConnection) {
String friendlyName = ((BluetoothPrinterConnection) zebraPrinterConnection).getFriendlyName();
DemoSleeper.sleep(500);
}
} catch (ZebraPrinterConnectionException e) {
//helper.showErrorDialogOnGuiThread("Error:" + e.getMessage());
Log.d("Error",e.getMessage());
} finally {
disconnect();
}
}
public void printMessage(String message) {
byte[] msg = null;
msg = message.getBytes();
//check connections
printer = connect();
if (printer != null) {
writeMessage(msg);
} else {
disconnect();
}
}
public void disconnect() {
try {
if (zebraPrinterConnection != null) {
zebraPrinterConnection.close();
}
} catch (ZebraPrinterConnectionException e) {
//setStatus("COMM Error! Disconnected", Color.RED);
} finally {
}
}
}