NFC 服务具体何时停用?
Posted
技术标签:
【中文标题】NFC 服务具体何时停用?【英文标题】:When exactly is the NFC Service deactivated? 【发布时间】:2012-05-25 10:18:56 【问题描述】:我想知道 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 服务是否已经停用,还是仍在运行但未处理标签?
【问题讨论】:
我也遇到了同样的问题,正在搜索结果。检查我的问题***.com/questions/10733723/… 我很确定屏幕必须打开并解锁(就像常量建议的那样:“...ON_UNLOCKED”。但我找不到任何官方确认。因此我仍然希望有人可以帮帮我。我正在考虑的一种解决方法是制作您自己的主屏幕/启动器并放入您自己的锁定屏幕。这将是一个伪屏幕,但 NFC 服务应该仍在运行。我认为您必须避免使用键盘锁,因为它似乎也使用了常量。 我们需要在屏幕锁定时处理 polling_mode 从这段代码看来,有一个强制布尔覆盖。我们如何在外部设置它?建造道具?反射? 【参考方案1】:实际上,我不认为 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();
服务本身在这个类的其他部分启动和停止。
【讨论】:
谢谢尤里!我见过一些版本通过将亮度调到一定水平来锁定屏幕。现在这是有道理的。您是否看到手动启动服务的可能性?我说的是非 root 手机,而不是个人制作的 ROM。 NFC 服务始终运行,无论 NFC 是打开还是关闭。 我也这么认为。只是我不想检查这个。这就是我写“我不认为”的原因。 ) 感谢您的澄清!【参考方案2】:查看相关http://forum.xda-developers.com/showthread.php?t=1712024&page=14
【讨论】:
以上是关于NFC 服务具体何时停用?的主要内容,如果未能解决你的问题,请参考以下文章