2017-02-26 307 views
6

我有一臺Epson打印機,並使用SDK中提供的epos2_printer(示例項目)代碼與我的應用程序集成。我已經複製相同的代碼,但它似乎從來沒有工作!Epson打印機連接失敗狀態ERR_CONN

但是,將示例項目連接到我的打印機時也是如此。

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

它總是給我例外ERROR_CONNECT on printer.connect內connectprinter功能。

我在做什麼錯?

此代碼可以正常使用示例應用程序。 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> 

+0

你使用的是什麼模式USB OTG等 – Killer

+0

如果你得到連接錯誤請確保你使用的是正確的型號名稱和其他常量。如果您使用的是微型USB,請確保您獲得了類似tcp的tcp路徑://../../usb1此信息可以通過SDK doc和示例應用程序 – Killer

回答

1

看起來你沒有在你的清單中的適當的權限。嘗試把這些項目中的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"/>

權限,但我不確定你需要它。我認爲必需品是藍牙和互聯網許可。

+0

中定義的discoverabilty獲得!將在明天嘗試現場..但只是好奇...即使我的打印機連接到網絡,我需要權限嗎? – Samra

+0

我相信你會需要互聯網許可。不是100%,但給它一個鏡頭,如果這不起作用,我們會嘗試別的。 –

1

Status ERR_CONN基本上顯示是否設備無法到達或設備帶有connection failing。它可以是USB, LAN/NETWORK, 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採樣項目ct,請記得導入Jar文件「EPOS2.jar」。 Click here to download the file.

2

正如我懷疑連接打印機方法似乎有錯誤。我曾經使用過這個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選擇目標

退房的功能提到什麼類型的你正在因此,在這種情況下連接,必須有問題:

public void connect(String target,int timeout)throws Epos2Exception;

enter image description here

你可能會使用錯誤的目標參數。

注意:如果您使用USB或任何其他模式,請確保根據文檔運行發現服務。

Discovery.start(this, mFilterOption, mDiscoveryListener); 

它會返回所需的目標名稱。我相信沒有連接失敗會發生。祝你好運\\

+1

謝謝,夥計!一旦我發現,我能夠輕鬆地進行連接和打印。 :-) – Thahaseen