我有一台爱普生打印机,我使用SDK提供的epos2_printer(示例项目)代码与我的应用程序集成.我复制了相同的代码,但它似乎永远不会起作用!
但是,当我将示例项目连接到打印机时,同样有效.
private boolean runPrintReceiptSequence() { if (!initializeObject()) { return false; } if (!createReceiptData()) { finalizeObject(); return false; } if (!printData()) { finalizeObject(); return false; } return true; } private boolean initializeObject() { try { final SpnModelsItem spnModel = new SpnModelsItem("TM-T82 Series",Printer.TM_T82); final SpnModelsItem spnLang = new SpnModelsItem("ANK",Printer.MODEL_ANK); mPrinter = new Printer(spnModel.getModelConstant(),spnLang.getModelConstant(),this); } catch (Exception e) { Log.e("Printer",e.toString()); return false; } mPrinter.setReceiveEventListener(this); return true; } private boolean createReceiptData() { String method = ""; Bitmap logoData = BitmapFactory.decodeResource(getResources(),R.drawable.logo_saltnpepper); StringBuilder textData = new StringBuilder(); final int barcodeWidth = 2; final int barcodeHeight = 100; Date currentDate = new Date(); info.saltnpepper.ordersmart2.MenuItem currItem = null; double price = 0; double total = 0; int totalQty =0; if (mPrinter == null) { return false; } try { method = "addTextAlign"; mPrinter.addTextAlign(Printer.ALIGN_CENTER); method = "addImage"; mPrinter.addImage(logoData,logoData.getWidth(),logoData.getHeight(),Printer.COLOR_1,Printer.MODE_MONO,Printer.HALFTONE_DITHER,Printer.PARAM_DEFAULT,Printer.COMPRESS_AUTO); method = "addFeedLine"; mPrinter.addFeedLine(1); textData.append("SALT-N-PEPPER\n"); //textData.append("STORE DIRECTOR – John Smith\n"); textData.append("\n"); textData.append((new SimpleDateFormat("dd/MM/yy HH:mm:ss")).format(currentDate).toString() + "\n"); //textData.append("ST# 21 OP# 001 TE# 01 TR# 747\n"); textData.append("------------------------------\n"); method = "addText"; mPrinter.addText(textData.toString()); textData.delete(0,textData.length()); if(alFinalOrder != null) { for(int i=0; i < alFinalOrder.size(); i++) { currItem = alFinalOrder.get(i); textData.append(currItem.getName()+" "+currItem.getQty()+" "+currItem.getPrice()+"\n"); //calculate total quantity totalQty = totalQty + currItem.getQty(); //calculate price double dPrice = currItem.getQty()*Double.parseDouble(currItem.getPrice().substring(1)); total = total + dPrice; total = Math.round(total*100.0)/100.0; } } textData.append("------------------------------\n"); method = "addText"; mPrinter.addText(textData.toString()); textData.delete(0,textData.length()); textData.append("TOTAL "+"\n"); textData.append("TAX "+"\n"); method = "addText"; mPrinter.addText(textData.toString()); textData.delete(0,textData.length());
mPrinter.addFeedLine(2);
method = "addBarcode"; mPrinter.addBarcode("01209457",Printer.BARCODE_CODE39,Printer.HRI_BELOW,Printer.FONT_A,barcodeWidth,barcodeHeight); method = "addCut"; mPrinter.addCut(Printer.CUT_Feed); } catch (Exception e) { //ShowMsg.showException(e,method,mContext); return false; } textData = null; return true; } private boolean printData() { if (mPrinter == null) { return false; } if (!connectPrinter()) { return false; } PrinterStatusInfo status = mPrinter.getStatus(); dispPrinterWarnings(status); if (!isPrintable(status)) { Log.e("Printer","Is not printable"); try { mPrinter.disconnect(); } catch (Exception ex) { // Do nothing } return false; } try { mPrinter.sendData(Printer.PARAM_DEFAULT); } catch (Exception e) { Log.e("Printer",e.getMessage()); try { mPrinter.disconnect(); } catch (Exception ex) { // Do nothing } return false; } return true; } private boolean connectPrinter() { boolean isBeginTransaction = false; if (mPrinter == null) { return false; } try { mPrinter.connect("TCP:"+mIP,Printer.PARAM_DEFAULT); } catch (Epos2Exception e) { //ShowMsg.showException(e,"connect",this); if(e.getErrorStatus() == Epos2Exception.ERR_CONNECT) { Log.e("testing","error connect"); } if(e.getErrorStatus() == Epos2Exception.ERR_ALREADY_OPENED) { Log.e("testing","already open"); } if(e.getErrorStatus() == Epos2Exception.ERR_ALREADY_USED) { Log.e("testing","already used"); } if(e.getErrorStatus() == Epos2Exception.ERR_Box_CLIENT_OVER) { Log.e("testing","Box client over"); } if(e.getErrorStatus() == Epos2Exception.ERR_Box_COUNT_OVER) { Log.e("testing","count over"); } if(e.getErrorStatus() == Epos2Exception.ERR_DISCONNECT) { Log.e("testing","disconnect"); } if(e.getErrorStatus() == Epos2Exception.ERR_FAILURE) { Log.e("testing","failure"); } if(e.getErrorStatus() == Epos2Exception.ERR_ILLEGAL) { Log.e("testing","illegal"); } if(e.getErrorStatus() == Epos2Exception.ERR_IN_USE) { Log.e("testing","in use"); } if(e.getErrorStatus() == Epos2Exception.ERR_MEMORY) { Log.e("testing","memory"); } return false; } try { mPrinter.beginTransaction(); isBeginTransaction = true; } catch (Exception e) { Log.e("Printer",e.toString ()); } if (isBeginTransaction == false) { try { mPrinter.disconnect(); } catch (Epos2Exception e) { // Do nothing return false; } } return true; }
它总是在connectprinter函数内的printer.connect上给我异常ERR_CONNECT.
我究竟做错了什么?
此代码适用于示例应用程序.
P.S:我在连接示例应用程序之前尝试连接此应用程序,以检查示例应用程序是否保持连接,并且不允许其他应用程序连接,但事实并非如此.爱普生帮助无法提供任何进一步的帮助.
我的AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xyz" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MenuActivity" > </activity> <activity android:name=".SaltnPepperActivity" android:label="@string/title_activity_saltn_pepper" > </activity> <activity android:name=".FinalOrder" ></activity> <activity android:name=".ZinVietActivity" > </activity> <activity android:name="com.epson.epos2_printer.DiscoverActivity" ></activity> </application>
解决方法
看起来您的清单中没有适当的权限.尝试将这些项目放在清单标记下的项目中:
< uses-permission android:name =“android.permission.BLUETOOTH”/>
< uses-permission android:name =“android.permission.BLUETOOTH_ADMIN”/>
< uses-permission android:name =“android.permission.INTERNET”/>
< uses-permission android:name =“android.permission.WRITE_EXTERNAL_STORAGE”/>
他们也有
< uses-permission android:name =“android.permission.ACCESS_COARSE_LOCATION”/>
许可,但我不确定你是否需要它.我认为必需品是蓝牙和互联网权限.