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

実際、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();
        }
    }

サービス自体は、このクラスの他の部分で開始および停止されます。

于 2012-05-25T13:06:46.147 に答える
1

関連するhttp://forum.xda-developers.com/showthread.php?t=1712024&page=14を参照してください

于 2012-08-12T14:56:28.277 に答える