1

我正在尝试制作一个读取 NCF 卡的小程序(用于 Sonim XP1301 手机)。

当程序未签名时,它可以工作,但每次读/写操作或 NFC 读取都需要用户许可...

程序签署后(使用官方 Sonim 证书),它甚至不会启动......只是抛出消息“Java 应用程序停止”,没有任何关于发生了什么的细节......

我不知道从哪里开始解决这个问题......一个猜测是NetBeans“API权限”设置中缺少一些复选框,但这只是一个疯狂的问题......

我不认为我的代码有什么问题,因为 Sonim 提供的示例代码也会发生同样的情况——当它没有签名时,程序可以工作,但在签名后它只是说“Java 应用程序停止”......

(我试图向 Sonim Support 询问这个问题,但完全沉默。)

这是 Sonim 自己的 NFC 读取示例代码:

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