我正在尝试制作一个读取 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");
}
}
}