1

NCF カードを読み取る小さなプログラムを作成しようとしています (Sonim XP1301 電話用)。

プログラムが署名されていない場合、プログラムは機能しますが、すべての読み取り/書き込み操作または NFC 読み取りに対してユーザーに許可を求めます...

プログラムが(公式のSonim証明書で)署名された後、起動すらしません...「Javaアプリケーションが停止しました」というメッセージがスローされ、何が起こったのかについての詳細はありません...

これをどこから解決すればよいかわかりません... 1 つの推測では、NetBeans の「API 権限」設定にいくつかのチェックボックスがありませんが、これはただの疑問です...

Sonim が提供するサンプル コードでも同じことが起こるため、コードに問題があるとは思いません。署名されていない場合、プログラムは動作しますが、署名後は「Java アプリケーションが停止しました」とだけ表示されます...

(Sonim サポートに問い合わせてみましたが、完全に沈黙しています。)

以下は、NFC 読み取り用の Sonim 独自のサンプル コードです。

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.contactless.TargetListener;
import javax.microedition.contactless.DiscoveryManager;
import javax.microedition.contactless.TargetProperties;
import javax.microedition.contactless.TargetType;
import javax.microedition.contactless.ContactlessException;

/**
 * @author parthosarkar
 */
public class TestNFCMidlet extends MIDlet implements TargetListener{
    Form frm;
    DiscoveryManager dm = DiscoveryManager.getInstance();

    public void startApp() {
        this.frm = new Form("Read Tag");
        registerTargetListeners();
        final Command localCommand = new Command("Exit", 7, 1);
        frm.addCommand(localCommand);
        frm.setCommandListener(new CommandListener(){
              public void commandAction(Command paramCommand, Displayable paramDisplayable)
              {
                if (paramCommand == localCommand)
                  notifyDestroyed();
              }
        });
        Display.getDisplay(this).setCurrent(this.frm);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void registerTargetListeners() {
        try {
            // Register listener for each of the supported types
            dm.addTargetListener(this, TargetType.NDEF_TAG);
            dm.addTargetListener(this, TargetType.ISO14443_CARD);
            dm.addTargetListener(this, TargetType.RFID_TAG);
        } catch (ContactlessException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void targetDetected(TargetProperties[] targetProperties) {
        if (targetProperties != null) {
            int NB_properties = targetProperties.length;
            for (int i=0;i < NB_properties;i++) {
                frm.append(targetProperties[i].getUid());
            }
        } else {
            frm.append("No Data");
        }
    }

}
4

0 に答える 0