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");
}
}
}