什么时候NFC服务确切停用?

时间:2012-05-25 10:18:57

标签: android locking screen nfc unlock

我想知道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服务是否已经停用,或者它是否仍在运行但是没有处理标签?

2 个答案:

答案 0 :(得分:3)

实际上,我不认为NFC服务已停用。当屏幕值较低时,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();
        }
    }

服务本身在本课程的其他部分启动和停止。

答案 1 :(得分:1)