Сбой подключения принтера Epson ERR_CONN

У меня есть принтер Epson, и я использовал код epos2_printer (образец проекта), данный с SDK для интеграции с моим приложением. Я скопировал тот же код, но он никогда не работает!

Тем не менее, это же работает, когда я подключаю образец проекта к моему принтеру.

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, 0, 0, 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; } 

Это всегда дает мне исключение ERR_CONNECT на printer.connect внутри функции connectprinter.

Что я делаю не так?

Этот код отлично работает с примером приложения. PS: Я пытался подключить это приложение, прежде чем подключать пример приложения, чтобы проверить, поддерживает ли приложение-образец соединение и не разрешает другим приложениям подключаться, но это не так. Справка Epson не в состоянии предоставить дополнительную помощь.

Мой 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> 

Похоже, у вас нет соответствующих разрешений в вашем манифесте. Попробуйте поместить их в свой проект под ярлыком manifest :

<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"/>

Но я не уверен, что вам это нужно. Я считаю, что важны разрешения Bluetooth и Интернета.

Status ERR_CONN в основном показывает, невозможно ли достичь устройства или connection failing с устройством. Это может быть состояние USB, LAN/NETWORK, Bluetooth Connection failure.

Если вы пытаетесь подключить принтер к Bluetooth, вы должны написать ниже разрешения:

 <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 

Если вы используете LAN для сетевых принтеров, тогда

 <uses-permission android:name="android.permission.INTERNET"/> 

Для подключения USB-принтера Использование:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

Когда вы используете EPOS2 Sample Project , не забудьте импортировать Jar-файл «EPOS2.jar». Нажмите здесь, чтобы скачать файл.

Это просто, как HttpConnection & writing DataOutputStream, прежде всего вам нужно сделать последовательное соединение с этим IP-адресом. После создания соединения вам необходимо сделать DataOutputStream для записи файлов / слов, это будет доступно для принтера и распечатает его. Ранее я делал это для Bluetooth-принтера.

Чтобы получить больше информации

Как я подозреваю, есть ошибка в подключении принтера. Я использовал этот SDK один раз, чтобы лучше правильно следовать документации (значит, не пропустить шаги). Убедитесь, что вы определили разрешение, указанное в SDK.

 <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"/> <activity android:name=".MainActivity" android:label="@string/app_title" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter"/> 

Как я вижу, вы не указали, какое соединение вы делаете таким образом, в этом случае должна быть проблема при выборе цели

Проверьте функцию из SDK:

Открытое void connect (String target, int timeout) вызывает Epos2Exception;

Введите описание изображения здесь

Возможно, вы используете неправильный целевой параметр.

Примечание. Если вы используете USB или какой-либо другой режим, убедитесь, что запустите службу обнаружения в соответствии с документами.

  Discovery.start(this, mFilterOption, mDiscoveryListener); 

Он вернет вам требуемое имя цели. И я уверен, что никаких сбоев соединения не произойдет. Удачи \ o

Intereting Posts