phonegap (html5、JQuery、JS) でアプリを開発しましたが、BT プリンターに印刷するプラグインを開発したいと考えています。
プリンター メーカーの SDK をダウンロードし、適切な .jar ファイルをプロジェクトにインポートし、プロジェクトで必要なすべてのメソッドを含めました。
JS からプリンター メーカー SDK の Java メソッドを呼び出すために、インターネット チュートリアルに従って、以下のプラグインを作成します。
JS
var HelloPlugin = {
callNativeFunction: function (success, fail, resultType) {
return cordova.exec(success, fail, "com.tricedesigns.HelloPlugin", "nativeAction", [resultType]);
}
};
ジャワ
package com.tricedesigns;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import com.starmicronics.stario.StarIOPort;
import com.starmicronics.stario.StarIOPortException;
import com.starmicronics.stario.StarPrinterStatus;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.util.Log;
public class HelloPlugin extends Plugin {
public static final String NATIVE_ACTION_STRING="nativeAction";
public static final String SUCCESS_PARAMETER="success";
@Override
public PluginResult execute(String action, JSONArray data, String callbackId) {
if (NATIVE_ACTION_STRING.equals(action)) {
this.ctx.runOnUiThread(new Runnable()
{
public void run()
{
String resultType = null;
StarIOPort port = null;
String message = null;
String portName = "bt:";
String portSettings = "mini";
byte[] texttoprint = new byte[]{0x1b, 0x40, 0x1b,0x74,0x0D,(byte) 0x91,(byte) 0x92,(byte) 0x93,(byte) 0x94,(byte) 0x95,(byte) 0x96,(byte) 0x97,(byte) 0x98,(byte) 0x99,0x0A,0x0A,0x0A,0x0A,0x0A};
try
{
port = StarIOPort.getPort(portName, portSettings, 10000);
try
{
Thread.sleep(500);
}
catch(InterruptedException e) {}
}
catch (StarIOPortException e)
{
Builder dialog = new AlertDialog.Builder((Context)ctx);
dialog.setNegativeButton("Ok", null);
AlertDialog alert = dialog.create();
alert.setTitle("Failure");
alert.setMessage("Failed to connect to printer");
alert.show();
}
finally
{
if(port != null)
{
try
{
StarIOPort.releasePort(port);
} catch (StarIOPortException e) {}
}
}
}
});
}
return null;
}
}
プリンタ コマンド マニュアルには次のように記載されています。
GetPort は、プリンターへのポートを「開く」ために使用するものです。前に説明したように、portName と portSettings の有効な入力の 1 つを使用して、接続文字列を StarIO クラスに渡し、プライベート変数が正しく設定されるようにすることができます。
//The following would be an actual usage of getPort:
StarIOPort port = null;
try
{
port = StarIOPort.getPort(portName, portSettings, 10000);
}
catch (StarIOPortException e)
{
//There was an error opening the port
}
StarIOPort は StarIO の一部であり、これにより「ポート」ハンドルを作成できます。上記の例では、ポートが作成されて null に設定され、getPort を含む次の行に実際のポート フックが割り当てられています。getPort を使用するときは、常に try と catch を使用してください。接続の問題のためにポートを開くことができない場合、上記の例のように try、catch を使用しない限り、プログラムはクラッシュします。
プラグインの上記の構文は正しいですか、それとも見逃したものがありますか?
アプリを実行すると、プリンターがオンになっていてデバイスに接続されていても、常に「プリンターに接続できませんでした」というメッセージが表示されます。