我如何使用setNdefPushMessage()

时间:2012-10-07 00:40:35

标签: android nfc

(在Nexus S上使用4.1.1 JellyBean)我试图关注these instructions,但可以使用哪些活动setNdefPushMessage()的限制对我来说有些模糊。目前我的应用程序,通过以下方式处理http请求的活动:

<activity android:name=".HandleUrlActivity"
          android:label="@string/title_handle_url_message" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" /
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
    </intent-filter>
</activity>

崩溃:

java.lang.IllegalStateException: API cannot be called while activity is paused

在HandleUrlActivity()中调用setNdefPushMessage()时。

在哪些活动中可以使用setNdefPushMessage()?或者如何在Ndef服务之前保持活动运行,如何知道该活动何时可以返回/退出?主叫:

    NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
    nfcAdapter.setNdefPushMessage(ndef, this);
    nfcAdapter.wait();

在有或没有等待的情况下给出上述错误。显然setNdefPushMessage()需要一些支持机制来处理等待nfc接收能力的设备接近,然后发送事件,我希望它阻止直到所有这一切都完成,但显然它没有。

enableForegroundNdefPush/disableForegroundNdefPush显然已经解决了这个问题,但似乎已经被ICS / JB推荐使用setNdefPushMessage处理所有这些...... ...

1 个答案:

答案 0 :(得分:0)

你想做什么? setNdefPushMessage()只是注册一条消息,它只会在Android运行时检测到兼容设备时发送。你无法控制这一点,所以调用wait()等没有意义(通常你不应该试图控制活动生命周期)。在onCreate()中调用它应该有效,但是当活动尚未完全构造且没有有效的Context时,不能在构造函数中调用它。一般来说,在处理VIEW的活动中使用它并没有多大意义,因为你无法真正控制何时启动,所以你想要完成什么?