【问题标题】:Disable NFC functionality from within the app从应用程序内禁用 NFC 功能
【发布时间】:2015-04-13 13:35:08
【问题描述】:

我要解决的问题如下:

NFC 标签将触发我的应用程序,我将从该应用程序启动另一个应用程序。有时会发生的情况是 NFC 标签会移动并被手机“重新发现”并再次启动我的应用程序。 NFC标签的移动是我无法控制的。

这真的破坏了体验。

我最想做的是,一旦我的应用程序启动,NFC 触发将被禁用或暂停,一旦应用程序关闭 (OnDestroy()),我将启用/取消暂停 NFC 功能。

我找不到如何做到这一点,非常感谢您的帮助。如果您有另一种(与代码相关的)方法来解决这个问题,那也一样好。

几年前我注意到了这篇文章:NFC disable adapter 但我希望有另一种解决方案,作为系统应用程序不是一个选项,并提示用户禁用 NFC 一样糟糕......

提前致谢。

【问题讨论】:

  • 你能拿到标签来打开所需的应用程序吗?这个答案解释了如何实现stackoverflow.com/a/8671967/2737421
  • 在您的 NFC 活动处于前台时防止重新扫描是否足以防止重新扫描,或者您是否还需要在您通过应用程序启动的活动处于前台时进行重新扫描?在后一种情况下:您是否可以控制第二个应用的源代码?
  • Tristan - 我已经设置了 NFC 来打开我的应用程序。迈克尔 - 后一种情况是我要解决的问题,不幸的是,第二个应用程序是通用的 3rd 方应用程序。

标签: android nfc


【解决方案1】:

您可以在活动运行时创建一个处理意图的活动别名disable it,并在活动被销毁时重新启用它。

【讨论】:

  • 有趣的解决方法。不是理想的解决方案,但我认为这与“禁用”手机的 NFC 功能一样接近。
  • 虽然此方法有效,但使用简单的服务来跟踪应用程序的状态以及 NFC 的状态比禁用和启用 Activity 的状态更有意义。
【解决方案2】:

您假设您可以安全地关闭手机的一项重要功能,并禁用依赖它的任何其他服务和/或应用程序。

这当然是错误的。您应该只对您自己的应用做出假设。

所以你真正想做的是禁用重新启动。这可以通过多种方式完成:

  1. 控制主 Activity 的 launch mode,从而控制整个应用。
  2. 通过Service 正确处理 NFC 意图,该Service 监控 NFC 状态以及您的应用程序的状态。根据@Michael 的评论 - 因为您只能将 NFC 意图与 Activity 相关联 - 您必须创建一个非 UI Activity(不调用 setContentView)作为 BroadcastListener 用于这个Service
  3. Tag your app,由 @Tristan 建议。

【讨论】:

  • NFC 标签发现意图仅发送到活动,因此无法通过服务直接处理它们(如您的第二个选项中所建议的那样)。
  • 您可以轻松创建一个非 UI Activity 来充当 BroadcastListener
猜你喜欢
  • 1970-01-01
  • 2018-02-06
  • 2020-04-23
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2017-12-23
相关资源
最近更新 更多