2014-12-03 40 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