StarXpand SDK for iOS / Android 開発者向けマニュアル Ver. 1.7.0

最終更新日: 2024年 6月 24日

キャッシュドロアーを使う

キャッシュドロアーを開ける制御データを生成し、プリンターに送信します。

手順や参照先がOSによって異なります。 表示するOSを選択してください。

iOS Android

以下はサンプルコードの説明です。この手順を参考にキャッシュドロアーの制御を行ってください。
ページ下部にサンプルコードがあります。

1プリンターの接続先情報を作ります。
通信に使用するinterfaceTypeと、 接続先を指定するidentifierをセットしてください。
プリンターを検索するで接続先のプリンターを検索済みの場合、この実装は不要です。
手順2のprinter変数には、manager(_ manager: StarDeviceDiscoveryManager, didFind printer: StarPrinter)メソッドで取得したStarPrinterインスタンスをセットしてください。

let starConnectionSettings = StarConnectionSettings(interfaceType: .lan,
                                                            identifier: “00:11:62:00:00:01”)

2プリンターの接続先情報を与えて、StarPrinterインスタンスを取得します。

let printer = StarPrinter(starConnectionSettings)

3キャッシュドロアーを開ける制御データを生成し、commands変数にセットします。

Memo
印刷とセットでキャッシュドロアーの制御を行いたい場合は 印刷データの生成:標準機能を参考に、DocumentBuilder に PrinterBuilderとDrawerBuilderを追加して印刷データを生成してください。

Task {
    do {
        let builder = StarXpandCommand.StarXpandCommandBuilder()
        _ = builder.addDocument(StarXpandCommand.DocumentBuilder.init()
                                    .addDrawer(StarXpandCommand.DrawerBuilder()
                                        .actionOpen(StarXpandCommand.Drawer.OpenParameter()
                                            .setChannel(.no1)
                                        )
                                    )
                                )

        let commands = builder.getCommands()

4プリンターに接続するためopenメソッドを呼び出します。

try await printer.open()

5印刷データの送信を行った後にプリンターとの接続を切断するためdeferブロックでcloseメソッドを呼び出します。

defer {
    Task {
        await printer.close()
    }
}

6プリンターにキャッシュドロアーを開ける制御データを送信するためprintメソッドを呼び出します。

try await printer.print(command: command)

7エラー時の処理を実装します。StarIO10Errorの値によりエラーを判別できます。
発生する可能性のあるエラーはStarPrinterクラスのopenメソッド、 printメソッドのAPIリファレンスに記載されています。

} catch StarIO10Error.notFound(message: let message, errorCode: let errorCode) {
    // Printer not found.
    // This may be due to the printer not being turned on or incorrect connection information.
} catch let error {
    print("Error: \(error)")
}
}
サンプルコード

let starConnectionSettings = StarConnectionSettings(interfaceType: .lan, identifier: “00:11:62:00:00:01”)

let printer = StarPrinter(starConnectionSettings)

Task {
    do {
        let builder = StarXpandCommand.StarXpandCommandBuilder()
        _ = builder.addDocument(StarXpandCommand.DocumentBuilder.init()
                            .addDrawer(StarXpandCommand.DrawerBuilder()
                                .actionOpen(StarXpandCommand.Drawer.OpenParameter()
                                    .setChannel(.no1)
                                )
                            )
        )

        let commands = builder.getCommands()

        try await printer.open()
        
        defer {
            Task {
                await printer.close()
            }
        }
        
        try await printer.print(command: command)
    } catch StarIO10Error.notFound(message: let message, errorCode: let errorCode) {
        // Printer not found.
        // This may be due to the printer not being turned on or incorrect connection information.
    } catch let error {
        print("Error: \(error)")
    }
}

以下はサンプルコードの説明です。この手順を参考にキャッシュドロアーの制御を行ってください。
ページ下部にサンプルコードがあります。

1プリンターの接続先情報を作ります。
通信に使用するinterfaceTypeと、接続先を指定する identifierをセットしてください。
プリンターを検索するで接続先のプリンターを検索済みの場合、この実装は不要です。
手順2のprinter変数には、onPrinterFoundメソッドで取得したStarPrinterインスタンスをセットしてください。

val settings = StarConnectionSettings(InterfaceType.Lan, “00:11:62:00:00:01”)

2プリンターの接続先情報を与えて、StarPrinterインスタンスを取得します。

val printer = StarPrinter(settings, applicationContext)

3キャッシュドロアーを開ける制御データを生成し、commands変数にセットします。

Memo
印刷とセットでキャッシュドロアーの制御を行いたい場合は 印刷データの生成:標準機能を参考に、DocumentBuilder に PrinterBuilderとDrawerBuilderを追加して印刷データを生成してください。

val job = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + job)

scope.launch {
    try {
        val builder = StarXpandCommandBuilder()
        builder.addDocument(
            DocumentBuilder()
                .addDrawer(
                    DrawerBuilder()
                        .actionOpen(OpenParameter()
                            .setChannel(Channel.No1)
                        )
                )
        )

        val commands = builder.getCommands()

4プリンターに接続するためopenAsyncメソッドを呼び出します。

printer.openAsync().await()

5プリンターに印刷データを送信するためprintAsyncメソッドを呼び出します。

printer.printAsync(commands).await()

6エラー時の処理を実装します。エラーの型によりエラー要因を判別できます。
発生する可能性のあるエラーはStarPrinterクラスのopenAsyncメソッド、 printAsyncメソッドのAPIリファレンスに記載されています。

    } catch (e: StarIO10NotFoundException) {
        // Printer not found.
        // This may be due to the printer not being turned on or incorrect connection information.
    } catch (e: Exception) {
        Log.d("Printing", "Error: ${e}")
    } finally {
        printer.closeAsync().await()
    }
}
サンプルコード

val settings = StarConnectionSettings(InterfaceType.Lan, “00:11:62:00:00:01”)
val printer = StarPrinter(settings, applicationContext)

val job = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + job)

scope.launch {
    try {
        val builder = StarXpandCommandBuilder()
        builder.addDocument(
            DocumentBuilder()
            .addDrawer(
                DrawerBuilder()
                .actionOpen(OpenParameter()
                    .setChannel(Channel.No1)
                )
            )
        )

        val commands = builder2.getCommands()

        printer.openAsync().await()
        printer.printAsync(commands).await()

        Log.d("Printing", "Success")
    } catch (e: StarIO10NotFoundException) {
        // Printer not found.
        // This may be due to the printer not being turned on or incorrect connection information.
    } catch (e: Exception) {
        Log.d("Printing", "Error: ${e}")
    } finally {
        printer.closeAsync().await()
    }
}