1

次の質問があります。

BT プリンター SDK から次の関数を使用する必要があります。

    StarIOPort port = null;
    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, context);
        port.writePort(textToPrint, 0, textToPrint.length);
        port.writePort(new byte[] {0x0a}, 0, 1);
    }
    catch (StarIOPortException e)
    {
        Builder dialog = new AlertDialog.Builder(context);
        dialog.setNegativeButton("Ok", null);
        AlertDialog alert = dialog.create();
        alert.setTitle("Failure");
        alert.setMessage("Failed to connect to printer");
        alert.show();
    }

文脈以外はすべて理解しました。

メーカーがそう言ってる

 * @param context - Activity for displaying messages to the user

上記の関数を使用する方法では、エラーも警告メッセージも表示されないため、どのように使用できますか。

4

5 に答える 5

2

アラート (またはその他の UI コンポーネント) を表示するには、アクティビティ コンテキストが必要です。現在実行中のアクティビティがない場合は、アラートを表示できません。

ただし、クラスToastの静的メソッドを使用して、Toast を表示できます。

public static Toast makeText(Context context, CharSequence text, int duration);

Application Context を最初のパラメーターとして渡します。

現時点で UI が実行されていなくても、アプリの実行中は常にアプリケーション コンテキストを利用できます。コンテキストからgetApplicationContext()メソッドを呼び出すことで取得できます。コンテキストがまったくない場合は、マニフェストで xml タグの下に定義されている YourAppClass ( public class YourAppClass extends Application ) をいつでも使用できます。最も一般的な方法は、YourAppClassをシングルトンにすることであり、アプリ内のコードの任意のポイントで常に使用できるようにします。

于 2012-09-03T12:58:46.560 に答える
0

私はここに答えを投稿しました: 仮想デバイスと実際のデバイスでのAndroid Phonegapプラグインの異なる結果(Looper.prepare()エラー)

一部のデバイスで発生したのと同じ問題が発生しました。成功した一人の賢い少年、トビーが私を助けてくれました。したがって、解決策は次のとおりです。
-StarIOPortのメソッドを呼び出す前に、ルーパーが存在するかどうかを確認する必要があります。

if (Looper.myLooper() == null) {
    Looper.prepare();
}

あなたの場合、それは次のようになります:

 try 
 {
    if (Looper.myLooper() == null) {
        Looper.prepare();
    }
    port = StarIOPort.getPort("BT:", "mini", 10000, null);
        try
        {
            Thread.sleep(500);
        }
        catch(InterruptedException e) {}

    port.writePort(texttoprint, 0, texttoprint.length);
        try
        {
            Thread.sleep(3000);
        }
        catch(InterruptedException e) {}

    resultType = "success";
 }
 catch (StarIOPortException e)
 {
     resultType = "error";
 }

もう1つのアドバイス:
代わりに

port = StarIOPort.getPort("BT:", "mini", 10000, null);

ただ使う

port = StarIOPort.getPort("BT:", "mini", 10000);

プラグインでは、コンテキストを使用しません

幸運を。

于 2012-09-13T13:59:14.827 に答える
0

Activity は Context のサブクラスであるため、印刷コードが Activity クラスの一部である場合は、thisSDK 要件を満たすために必要なコンテキストを提供するだけです。

port = StarIOPort.getPort(portName, portSettings, 10000, this);

以降

Builder dialog = new AlertDialog.Builder(this);
于 2012-09-03T12:58:26.077 に答える
0

Context はアクティビティに関連するクラスで、AlertDialog、Toast、システム サービスを表示する必要がある場合に使用します...これはアーキテクチャ MVC に関連していますが、これについては説明が少し長くなります。使い方については、2通りあります。メイン アクティビティ (MainActivity.java ファイル) で AlertDialog を使用している場合、メイン アクティビティはアラート ダイアログを起動するものになります。アクティビティではない別のクラスから起動された場合は、コンテキストをパラメーターとして (たとえば、 new Class(MainActivity.this) )、クラス内に配置する必要があります。たとえば、 public class( Context context) ant パラメータ context は、使用する必要があるものです。

于 2012-09-03T12:57:00.490 に答える
0

コンテキストはアクティビティです。

private Context context;
context = this;

これが完全なサンプル アクティビティです。

package com.example.helloworld;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import <my_star_io_library>;

public class HelloWorld extends Activity 
{
    private Context context;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        //Save context
        context = this;

        StarIOPort port = null; 
        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, context); 
            port.writePort(textToPrint, 0, textToPrint.length); 
            port.writePort(new byte[] {0x0a}, 0, 1); 
        } 
        catch (StarIOPortException e) 
        { 
            Builder dialog = new AlertDialog.Builder(context); 
            dialog.setNegativeButton("Ok", null); 
            AlertDialog alert = dialog.create(); 
            alert.setTitle("Failure"); 
            alert.setMessage("Failed to connect to printer"); 
            alert.show(); 
        } 
    }
}
于 2012-09-03T13:00:55.277 に答える