2014-12-03 37 views
2

我的应用程序已经处理后台的WIFI /蓝牙连接/断开连接,并根据这些事件执行后台任务。 现在我想用NFC做同样的事情,但我发现的所有样本都是在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> 

其实我已经读过,这是由于Android的后退化战略的不可能的。 迄今为止我发现的唯一解决方案是定义一个没有UI的活动,并对连接的标签进行轮询。 我真的不喜欢这种技术,因为它需要保持这种活动打开,这会导致电池使用增加

任何人都可以帮助我吗?

干杯, 斯特凡

回答

4

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

因此,android.nfc.action.*_DISCOVERED意图是只有发送到活动,他们不能通过广播接收器接收。因此接收它们并使其看起来发生在后台的唯一可能性是使用一个没有UI的活动,然后将这些事件转发到您的后台任务。

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

+0

问题是我的应用程序是一个时间跟踪软件,一位用户提出他只是想将设备放在他的NFC贴纸上开始跟踪的请求。 我目前没有看到问题,但他也希望当他从贴纸中移除设备时停止时间跟踪... 唯一可行的解​​决方案是让设备保持清醒并始终进行轮询这不是很好: – stefan 2014-12-04 14:18:07

+1

作为Android(除非你适用于Android系统的一些黑客)只有在设备唤醒时激活NFC读写器功能(并且调查标签),屏幕打开并且设备是解锁(存在黑客以避免对根植设备进行解锁限制,并且Android 5上有此例外情况),您几乎无法做到这一点。 – 2014-12-04 15:36:51