4

我想知道 NFC 服务何时启动和停止。android 4.0.3 的源代码似乎表明轮询依赖于单个常量(位于 NfcService.java 中)

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

我将此解释为“屏幕灯亮,因此 nfc 服务处于活动状态”。但是当屏幕被锁定时,即使屏幕亮着,NFC 标签也不会被识别。

所以我很好奇:当锁屏出现时,NFC 服务是否已经停用,还是仍在运行但未处理标签?

4

2 回答 2

3

实际上,我不认为 N​​FC 服务已停用。当屏幕值较低时,SCREEN_STATE_ON_UNLOCKED设备会停止询问 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 路由已启用,但屏幕状态更高SCREEN_STATE_ON_LOCKED

    // 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();
        }
    }

服务本身在此类的其他部分中启动和停止。

于 2012-05-25T13:06:46.147 回答
1

见相关http://forum.xda-developers.com/showthread.php?t=1712024&page=14

于 2012-08-12T14:56:28.277 回答