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