2012-05-25 50 views
4

我想知道NFC服務何時開始和停止。 的Android 4.0.3源代碼似乎指出輪詢是依賴於(位於NfcService.java)什麼時候NFC服務停用?

/** minimum screen state that enables NFC polling (discovery) */ 
static final int POLLING_MODE = SCREEN_STATE_ON_UNLOCKED; 

我將其解釋爲單個常數「屏幕亮,因此NFC服務是主動的「。 但是當屏幕鎖定時,NFC標籤不會被識別,儘管屏幕亮起。

所以我很好奇:當鎖定屏幕出現時NFC服務是否已經停用,還是仍在運行,但沒有處理標籤?

+0

我也有同樣的問題和搜索結果。檢查我的問題http://stackoverflow.com/questions/10733723/launching-nfc-when-screen-is-locked-in-android – Venky

+0

+1,尼斯問題 – Venky

+1

我很確定屏幕必須打開和解鎖(如常數暗示:「... ON_UNLOCKED」 但我找不到任何官方肯定,因此我仍然希望有人能幫助我。 我正在考慮的解決方法是製作自己的主屏幕/啓動器和放入你自己的鎖定屏幕上,這將是一個僞造的,但NFC服務應該仍在運行,我認爲你必須避免使用鍵盤鎖,因爲它似乎也使用常量 – hamena314

回答

3

其實,我不認爲NFC服務已停用。當屏幕具有較低的值時,則設備停止詢問周圍的NFC標籤。你可以從這個代碼中看到這一點:

// configure NFC-C polling 
    if (mScreenState >= POLLING_MODE) { 
     if (force || !mNfcPollingEnabled) { 
      Log.d(TAG, "NFC-C ON"); 
      mNfcPollingEnabled = true; 
      mDeviceHost.enableDiscovery(); 
     } 
    } else { 
     if (force || mNfcPollingEnabled) { 
      Log.d(TAG, "NFC-C OFF"); 
      mNfcPollingEnabled = false; 
      mDeviceHost.disableDiscovery(); 
     } 
    } 

但NFC-EE路由啓用util的屏幕狀態是高於​​3210:

// configure NFC-EE routing 
    if (mScreenState >= SCREEN_STATE_ON_LOCKED && 
      mEeRoutingState == ROUTE_ON_WHEN_SCREEN_ON) { 
     if (force || !mNfceeRouteEnabled) { 
      Log.d(TAG, "NFC-EE ON"); 
      mNfceeRouteEnabled = true; 
      mDeviceHost.doSelectSecureElement(); 
     } 
    } else { 
     if (force || mNfceeRouteEnabled) { 
      Log.d(TAG, "NFC-EE OFF"); 
      mNfceeRouteEnabled = false; 
      mDeviceHost.doDeselectSecureElement(); 
     } 
    } 

服務本身已啓動,並在這個類的其他部分停止。

+0

謝謝Yury! 我已經看到一些版本通過在某個級別下調整其亮度來鎖定屏幕。現在這是有道理的。 您是否看到手動啓動服務的可能性? 我正在談論一款無根手機,而不是個人制作的ROM。 – hamena314

+0

無論NFC開啓還是關閉,NFC服務始終在運行。 –

+0

我也這麼認爲。只是我不想檢查這一點。這就是我寫「我不認爲」的原因。 )謝謝澄清! – Yury

相關問題