4

ここでAPIを見つけました

しかし、AndroidSample テスト アプリを実行すると、エラーが発生します。

「プリンターの状態を取得」ボタンを押すと、「プリンターはオンラインです」と表示されます。このボタンは動作するようです。

でも:

  • 「プリンターからデータを読み取る」を押すと、「失敗しました。ファームウェア名を読み取れませんでした。」

  • 「領収書の印刷」を押すと、アプリケーションが 3 秒間ハングします。その後、何もありません。

  • 「Print Checked Block Receipt」を押すと、「印刷に成功しました」または大きなハングが発生します (強制的に閉じることもあります)。いずれにせよ、何も印刷されません。

4

4 に答える 4

6

それを機能させる方法を理解するのに永遠にかかりました。始められるようにできる限りのことをします。私はAndroidにかなり慣れていないので、間違っていることを指摘してください。コンテンツを上に移動すると誤って印刷されることがあるため、上部が切り取られ、下部に多くのスペースが追加されます。誰かがそれを理解できるなら、私は大歓迎です。

どうぞ:

APK からこれらのファイルが必要です: とにかく私がそれらを変更したとは思わないでください: 1. RasterDocument.java 2. StarBitmap.java

主な印刷方法:

    public static void PrintReceipt(Context context, RelativeLayout layout){

        String portName = "tcp:10.1.250.20"; //ip address of your printer
        String portSettings = "";

//have to measure the layout for it to print correctly, otherwise sizes are zero
        layout.measure(View.MeasureSpec.makeMeasureSpec(layout.getLayoutParams().width, View.MeasureSpec.EXACTLY),
                View.MeasureSpec.makeMeasureSpec(layout.getLayoutParams().height, View.MeasureSpec.EXACTLY));
        layout.layout(0, 0, layout.getMeasuredWidth(), layout.getMeasuredHeight());

        Bitmap bitmap = Bitmap.createBitmap(layout.getWidth(),layout.getHeight(), Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawColor(Color.WHITE);
        layout.draw(canvas);


        int maxWidth = 576; //default width of tsp100 receipt
        RasterDocument rasterDoc = new RasterDocument(RasterDocument.RasSpeed.Full, RasterDocument.RasPageEndMode.FeedAndFullCut, RasterDocument.RasPageEndMode.FeedAndFullCut, RasterDocument.RasTopMargin.Standard, 0, 0, 0);
        StarBitmap starbitmap = new StarBitmap(bitmap, false, maxWidth);

        StarIOPort port = null;
        try
        {
            /*
                   using StarIOPort3.1.jar (support USB Port)
                   Android OS Version: upper 2.2
               */
            port = StarIOPort.getPort(portName, portSettings, 10000, context);
            /*
                   using StarIOPort.jar
                   Android OS Version: under 2.1
                   port = StarIOPort.getPort(portName, portSettings, 10000);
               */

            try
            {
                Thread.sleep(500);
            }
            catch(InterruptedException e) {}

            byte[] command = rasterDoc.BeginDocumentCommandData();
            port.writePort(command, 0, command.length);
            command = starbitmap.getImageRasterDataForPrinting();
            port.writePort(command, 0, command.length);
            command = rasterDoc.EndDocumentCommandData();
            port.writePort(command, 0, command.length);

            try
            {
                Thread.sleep(1000);
            }
            catch(InterruptedException e) {}
        }
        catch (StarIOPortException e)
        {
            ShowAlertMessage(context, "Failure", "Failed to connect to printer. " + e.getMessage());
        }
        finally
        {
            if(port != null)
            {
                try {
                    StarIOPort.releasePort(port);
                } catch (StarIOPortException e) {}
            }
        }

    }

    private static void ShowAlertMessage(final Context context, final String alertTitle, final String message){
        try {
            ((Activity)context).runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    AlertDialog.Builder dialog = new AlertDialog.Builder(context);
                    dialog.setNegativeButton("Ok", null);
                    AlertDialog alert = dialog.create();
                    alert.setTitle(alertTitle);
                    alert.setMessage(message);
                    alert.show();
                }});
        } catch (final Exception e) {
            Log.e(PrinterFunctions.class.getName(), e.getMessage());
        }
    }

THEN: 別の方法で、PrintReceipt に相対レイアウトを送信します。クラスのコンストラクターで現在のコンテキストを設定します。

  Context currentContext;
    RelativeLayout relativeLayout;
    private final int receiptWidth = 576;
    private Typeface typeFace = Typeface.DEFAULT;
    private int normalFontSize = 23;
    private int largeFontSize = 28;

public SetupReceiptClass(Context context){
    currentContext = context;
}
public void SetupReceipt(String customerName){
       //Create layout for receipt
        relativeLayout = new RelativeLayout(currentContext);
        RelativeLayout.LayoutParams params;
        params = new RelativeLayout.LayoutParams(receiptWidth,     ViewGroup.LayoutParams.MATCH_PARENT);
        relativeLayout.setLayoutParams(params);
        relativeLayout.setId(R.id.ReceiptLayout);

//Create whatever views you want here and add them to the RelativeLayout to make up your receipt
relativeLayout.addView(whateverViewsYouCreate);

//Finally, Print the receipt.
        new Thread(new Runnable() {

            @Override
            public void run() {
                PrintReceipt(currentContext, relativeLayout);
            }
        }).start();

}

繰り返しますが、私はアンドロイドのことは初めてです。これは最善の方法ではないかもしれませんが、印刷しています。あなたが見つけた素晴らしいものは何でも、私はそれらを聞きたいです.

于 2012-07-31T21:30:09.467 に答える
3

iOSおよびAndroidStarIOSDKのドキュメントを読んだところ、STARTSP100LANでは「ラスターモード」である必要があることがわかりました。残念ながら、iPhoneとAndroidの両方のSDKで提供されているサンプルは、「ラインモード」での印刷専用です。これは答えではありませんが、うまくいけば、正しい方向にあなたを向けるのに役立つでしょう:)

Star自身に連絡して、サンプルコードを直接入手できるかどうかを確認します。幸運を祈ります。ここに、返信があれば報告します。

于 2011-11-15T11:42:12.247 に答える
0

Starは、このスレッドで言及されている古いバージョン(V1.0だと思います)よりも多くの機能を備えた新しいAndroidSDKパッケージを追加しました。新しいものはここから入手できます

上記のように、TSP100LANはネイティブにグラフィカルプリンターであるため、ラスターコマンドを受信する必要があります。最新のSDKパッケージには、いくつかのラスターコマンドを含む、さまざまなプリンター機能をテストできる更新されたサンプルアプリが含まれています。

この回答の執筆時点でダウンロード可能なSDKパッケージはV2.3です。マニュアル(README_StarIO_POSPrinter_Android_SDK.pdf)には、TSP100LANで、Open Cash Drawer、Get Status、Print Raster Graphical Text(テキストの装飾/プリンターへの送信)、およびImage File Printing(クーポン)機能を使用できると記載されています。

Starには、他の機能の詳細を示すラスターコマンドを含むプログラミングマニュアルもあります。セクション3.4を参照してください

于 2012-04-04T07:20:27.893 に答える
0

を追加ActivityしましたAndroidManifestか?アプリがそれらを許可するために必要なアクセス許可を追加しますか?

于 2011-07-07T18:19:31.350 に答える