用于NFC的程序化意图过滤器

时间:2011-05-26 17:28:43

标签: android intentfilter nfc

编辑:我找到了解决方案,见下文

我在StackOverFlow上的第一篇文章。但是,如果没有可行的解决方案,我一直在阅读这个问题。

我想做的是注册以下Intent: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定义如下:

公共类NFCBroadcastReciever扩展了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);
    }
}

}

但是我得到一个例外,即从标签读取中触发的意图没有相应的Activity。我希望能够在我的应用程序中的某个时刻开始收听NFC事件。

提前感谢您的帮助。

我实际上找到了问题的解决方案,关键是让NFC事件仅在特定活动处于活动状态时发生,而不是在其他活动正在运行时发生。 Android SDK中的示例对其进行了解释:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html

2 个答案:

答案 0 :(得分:2)

我实际上找到了问题的解决方案,关键是让NFC事件仅在特定活动处于活动状态时发生,而不是在其他活动正在运行时发生。 Android SDK中的示例对其进行了解释:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html

答案 1 :(得分:0)

您打算在收到广播时开始活动吗?我认为paymentScreen.onNewIntent(intent);不会实现这一目标。相反,您可能需要构建一个可以与startActivity()一起使用的意图,并且您可能希望以附加形式将广播接收者意图中的相关数据包含到您的活动意图中。