2

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

我在 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 定义如下:

公共类 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);
    }
}

}

但是我得到一个异常,即从标签读取触发的意图没有相应的活动。我希望能够只在我的应用程序的某个点开始监听 NFC 事件。

在此先感谢您的帮助。

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

4

2 回答 2

2

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

于 2011-06-22T10:38:49.670 回答
0

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

于 2011-05-26T17:36:46.083 回答