ロゴ:EPSON
ロゴ:よくあるご質問(FAQ)

製品別
質問別
エプソンパートナーポータル

URLをクリップボードにコピーしました
シェア用URL:https://faq2.epson.jp/web/Detail.aspx?id=52706
  FAQ番号:52706
印刷失敗時の再印刷<ePOS SDK for Android>
印刷失敗時のリトライ処理を実装したいが、マニュアルに該当情報が見当たらない。
どのようにすべきか教えて欲しい。
 
 

開発キット:Epson ePOS SDK for Android の Printer クラスで使用可能な connect と sendData にて
処理失敗時に発生する例外:Epos2Exception や、sendData の処理結果を知るイベントリスナーを活用し、
印刷失敗時におけるリトライ処理を実装してください。

connect

connect の処理時にプリンターと通信ができなかった場合などでは、以下のように例外処理と
Epos2Exception クラスよりエラー内容を確認できます。


  try {
    printer.connect("TCP:192.168.192.168", Printer.PARAM_DEFAULT);

  }
  catch (Epos2Exception e) {
    String return_text = "";
    switch (e) {

      case Epos2Exception.ERR_PARAM:
           //不正なパラメーターが渡された。
           return_text = "ERR_PARAM";
           break;

      case Epos2Exception.ERR_CONNECT:
           //オープンに失敗した。
           return_text = "ERR_CONNECT";
           break;

      case Epos2Exception.ERR_TIMEOUT:
           //指定時間内にデバイスと通信できなかった。
           return_text = "ERR_TIMEOUT";
           break;

      case Epos2Exception.ERR_ILLEGAL:
           //既に通信されている状態で、再度通信開始しようとした。
           return_text = "ERR_ILLEGAL";
           break;

      case Epos2Exception.ERR_IN_USE:
           //デバイスが使用中。
           return_text = "ERR_IN_USE";
           break;

      case Epos2Exception.ERR_NOT_FOUND:
           //デバイスが見つからない。
           return_text = "ERR_NOT_FOUND";
           break;

      case Epos2Exception.ERR_TYPE_INVALID:
           //デバイスの種類が違う。
           return_text = "ERR_TYPE_INVALID";
           break;

      default:
           break;
    }

    // エラー処理へ
  }

上記のように connect 処理失敗時に確認できたエラー内容を元に対処をおこなって頂き、その後に
再接続処理を実施する等をご検討ください。

sendData

sendData でも処理が失敗したときは上記のように Epos2Exception クラスでエラー内容の確認が
できますが、その他に「 sendData 処理が成功した後のプリンターからの応答 」も確認できます。

プリンターに対し sendData で無事にデータ送信がおこなえても、印刷ができなかった結果を
プリンターからの通知で知るためには、以下のように setReceiveEventListener を使用します。


  //印刷完了イベントリスナーを登録。
  printer.setReceiveEventListener(this);

  <中略>

  //印刷データの送信
  printer.sendData(Printer.PARAM_DEFAULT);

  //印刷結果(プリンターからの応答)を取得
  @Override
  public void onPtrReceive(final Printer printerObj, final int code,
   final PrinterStatusInfo status, final String printJobId) {
        runOnUiThread(new Runnable() {
            @Override
            public synchronized void run() {
                switch (code) {
                
                   case Epos2CallbackCode.CODE_SUCCESS:
                        //印刷成功
                        break;

                   case Epos2CallbackCode.CODE_ERR_COVER_OPEN:
                        //用紙カバーオープン中
                        break;

                   case Epos2CallbackCode.CODE_ERR_EMPTY:
                        //用紙なし
                        break;

                   case Epos2CallbackCode.CODE_ERR_FAILURE:
                        //要求ドキュメントの構文に誤りがある
                        break;

                   case Epos2CallbackCode.CODE_ERR_NOT_FOUND:
                        //デバイス ID で指定したデバイスが存在しない
                        break;
                        
                   default:
                        break;
                }
            }
        });
    }

  

上記のように setReceiveEventListener で印刷完了イベントリスナーを登録し、
イベント onPtrReceive によってプリンターからの返信内容をご確認ください。
エラーのとき再処理(印刷をやり直す)仕組みをお作りください。

モバイルプリンター TM-P20,TM-P60II,TM-P80
PC一体型プリンター TM-T70II-DT,TM-T88V-DT,TM-T70II-DT2,TM-T88VI-DT2
スマートレシートプリンター TM-T88V-i,TM-T70-i
TMシリーズ TM-T70,TM-T70II,TM-T88V,TM-T88VI,TM-T90II,TM-m10,TM-m30,TM-T20,TM-T20II,TM-T20III
FAQ改善アンケート

このページの評価をお聞かせください。〇✖をお選びください。

 

■役に立った
■役に立たなかった