NFC在后台

ste*_*fan 2 android nfc intentfilter broadcastreceiver android-intent

我的应用程序已在后台处理WIFI /蓝牙连接/断开连接,并根据这些事件执行后台任务。现在,我想对NFC做同样的事情,但是到目前为止,我发现的所有样本都在发现NFC标签时开始了一项活动。

我已经尝试为NDEF_DISCOVERED注册一个接收器,但是它不起作用...

 <receiver android:name="com.mxp.time.receivers.NfcReceiver" >
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

实际上,我已经读过,由于android的后备策略,这是不可能的。到目前为止,我发现的唯一解决方案是在没有UI的情况下定义活动,并在连接的标签上进行轮询。我真的不喜欢这种技术,因为它需要保持此活动为打开状态,这会增加电池使用量

谁能帮我这个?

干杯,斯特凡

Mic*_*and 5

不,那不可能。Android上的NFC被设计为一种(有意的)用户交互形式(因此使用了用户可见的活动)。毕竟,这就是应该使用NFC标签的目的。

因此,android.nfc.action.*_DISCOVERED意图发送给活动,无法通过广播接收器接收。因此,接收它们并使它似乎在后台发生的唯一可能性是使用没有UI的活动,然后将这些事件转发给您的后台任务。

如果使用NDEF_DISCOVERED意图(具有关联的数据),通常无需保持活动打开就可以执行轮询。相反,您可以注册要根据该特定意图启动的活动。顺便说一句。由于Android始终会在屏幕打开时轮询标签,因此在注册用于接收NFC事件的活动时,电池使用情况应该不会有太大差异。