編集:解決策を見つけました。以下を参照してください
StackOverFlow に関する私の最初の投稿。しかし、私はしばらくの間、この問題について読んでいますが、うまくいく解決策はありません。
私がやりたいことは、次のインテントを登録することです: android.nfc.action.TAG_DISCOVERED
コードで次のことを行っています。
IntentFilter filter = new IntentFilter();
filter.addAction("android.nfc.action.TAG_DISCOVERED");
filter.addCategory("android.intent.category.DEFAULT");
Log.d(TAG, "Created the new filter");
reciever = new NFCBroadcastReciever(this);
Log.d(TAG, "Created the new Broadcast Reciever");
this.registerReceiver(reciever, filter);
Log.d(TAG, "Registered new reciever");
BroadCastReciever は次のように定義されます。
public class NFCBroadcastReciever extends BroadcastReceiver {
private Screen screen;
public static String TAG = "NFCBroadcastReciever";
NFCBroadcastReciever(Screen _screen){
screen = _screen;
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d(TAG, "Action recieved: "+action);
if(action != null && NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)){
paymentScreen.onNewIntent(intent);
}
}
}
ただし、タグ読み取りから起動されたインテントに対応するアクティビティがないという例外が発生します。アプリケーションの特定の時点でのみ NFC イベントのリッスンを開始できるようにしたいと考えています。
よろしくお願いします。
実際に問題の解決策を見つけました。これは、他のアクティビティが実行されているときではなく、アクティブな特定のアクティビティでのみ NFC イベントを発生させるための鍵です。Android SDK のサンプルで説明されています: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html