2017-02-26 25 views
6

Tôi có máy in Epson và tôi đã sử dụng mã epos2_printer (mẫu dự án) được cung cấp cùng với SDK để tích hợp với ứng dụng của tôi. Tôi đã sao chép cùng một mã nhưng nó dường như không bao giờ hoạt động!Máy in Epson kết nối trạng thái lỗi ERR_CONN

Tuy nhiên, các công việc tương tự khi tôi kết nối dự án mẫu với máy in của mình.

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

Nó luôn mang đến cho tôi ngoại lệ ERR_CONNECT trên printer.connect bên trong chức năng connectprinter.

Tôi đang làm gì sai?

Mã này hoạt động tốt với ứng dụng mẫu. P.S: Tôi đã cố gắng kết nối ứng dụng này trước khi kết nối ứng dụng mẫu để kiểm tra xem ứng dụng mẫu có giữ kết nối và không cho phép các ứng dụng khác kết nối nhưng không phải như vậy. Trợ giúp của Epson không thể cung cấp thêm trợ giúp nào.

My 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

chế độ nào bạn đang sử dụng usb otg vv – Killer

+0

Nếu bạn gặp lỗi kết nối, hãy đảm bảo bạn đang sử dụng tên mẫu và các hằng số khác. Nếu bạn đang sử dụng usb vi chắc chắn rằng bạn nhận được một số đường dẫn tcp như tcp: //../../usb1 Thông tin này có thể có được bằng cách khám phá như được định nghĩa trong SDK tài liệu và ứng dụng mẫu – Killer

Trả lời

1

Hình như bạn không có sự cho phép thích hợp trong biểu hiện của bạn. Hãy thử đặt này trong dự án của bạn dưới manifest tag:

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

Họ cũng có

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

quyền nhưng tôi không chắc chắn bạn cần nó. Tôi nghĩ rằng các yếu tố cần thiết là Bluetooth và quyền truy cập Internet.

+0

ok !! sẽ thử nó tại chỗ vào ngày mai..nhưng chỉ tò mò .. tôi có cần sự cho phép ngay cả khi máy in của tôi được kết nối với mạng không? – Samra

+0

Tôi tin rằng bạn sẽ cần sự cho phép internet cho điều đó. Không phải 100%, nhưng cho nó một shot, nếu điều đó không làm việc, chúng tôi sẽ thử một cái gì đó khác. –

1

Status ERR_CONN về cơ bản sẽ hiển thị nếu không thể truy cập thiết bị hoặc connection failing với thiết bị. Nó có thể là USB, LAN/NETWORK, Bluetooth Trạng thái lỗi kết nối.

Nếu bạn đang cố gắng để kết nối máy in với Bluetooth thì bạn phải viết dưới quyền:

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

Nếu bạn đang sử dụng mạng LAN cho các máy in mạng sau đó

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

Đối với USB kết nối máy in sử dụng:

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

Vì bạn đang sử dụng EPOS2 Sample Proje ct, hãy nhớ nhập tệp Jar "EPOS2.jar". Click here to download the file.

2

Vì tôi nghi ngờ có vẻ như là lỗi trong phương thức kết nối máy in.Tôi đã sử dụng SDK này một lần tốt hơn theo tài liệu đúng cách (có nghĩa là không bỏ qua các bước). Đảm bảo bạn đã xác định quyền như được đề cập trong 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"/> 

Như tôi thấy bạn đã không được đề cập loại kết nối bạn đang làm như vậy, trong trường hợp đó, phải có vấn đề trong việc lựa chọn mục tiêu

Kiểm tra hàm từ SDK:

Kết nối khoảng trống công cộng (Mục tiêu chuỗi, thời gian chờ int) ném Epos2Exception;

enter image description here

Bạn có thể sử dụng tham số mục tiêu sai.

Lưu ý: nếu bạn đang sử dụng USB hoặc bất kỳ chế độ nào khác, hãy đảm bảo dịch vụ phát hiện chạy theo tài liệu.

Discovery.start(this, mFilterOption, mDiscoveryListener); 

Nó sẽ trả lại tên mục tiêu yêu cầu. Và tôi chắc chắn không có lỗi kết nối nào xảy ra. Good Luck \ o

+1

Cảm ơn, người đàn ông! Một khi tôi đã khám phá ra, tôi đã có thể kết nối và in dễ dàng. :-) – Thahaseen

Các vấn đề liên quan