2012-05-25 2 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 уже отключена, когда появляется экран блокировки, или он все еще работает, но не обрабатывает теги?

+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 отключена. Когда экран имеет более низкое значение, то 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 маршрутизация включена Util состояние экрана выше, чем 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(); 
     } 
    } 

Сама служба запускается и останавливается в других частях этого класса ,

+0

Спасибо, Юрий! Я видел некоторые версии, чтобы заблокировать экран, повернув его яркость на определенном уровне. Теперь это имеет смысл. Вы видите возможность запуска службы вручную? Я говорю о некорректном телефоне, а не о персональном ПЗУ. – hamena314

+0

Служба NFC всегда работает, независимо от того, включен или выключен NFC. –

+0

я тоже думаю. Просто я не хотел это проверять. Вот почему я написал «Не думаю».) Спасибо за разъяснение! – Yury