【问题标题】:NFC intent calling onPause before onNewIntent - How to know the origin of the onPause call?NFC 意图在 onNewIntent 之前调用 onPause - 如何知道 onPause 调用的来源?
【发布时间】:2016-07-13 02:01:45
【问题描述】:

在启用前台调度的应用程序中扫描 NFC 标签时,onPause()onNewIntent() 之前被调用。是否可以在onPause() 中获取 NFC 意图,以便我可以根据意图的来源停止(或不)进程?

由于活动处于前台并且在扫描标签时不应暂停/恢复,并且由于我有必须在onPause/onResume 中停止或启动的任务,因此您可以看到问题。

getIntent().getAction() 始终是“MAIN”,但肯定有一种方法可以更准确地描述意图吗?或者在输入onNewIntent()之前不可能知道这是NFC意图?

【问题讨论】:

  • 粘贴您的意图过滤器。我猜你的意图过滤器有问题。
  • IntentFilter 没有问题。 NFC 的 IntentFilter 仅在 onNewIntent() 方法中读取,在 onPause() 中尚不存在。我需要的是能够检测到 onPause() 是由系统还是用户调用的。
  • 不应调用 On Tap NFC onPause .. 你确定你的 NFC 事件正在生成吗??

标签: android android-intent nfc android-lifecycle foreground


【解决方案1】:

不,在将新意图传递到onNewIntent() 中的活动之前,您将无法知道它是什么。这就是onNewIntent() 回调的重点:将有关新意图的信息传递给您的活动。只有调用该方法时,才能通过该方法的intent参数获取新的intent:

@Override
protected void onNewIntent(Intent intent) {
    ...
}

请注意,getIntent() 将始终返回最初启动您的活动的意图,除非您使用setIntent(newintent) 明确更新该意图。因此,如果您通过启动器启动活动,您将获得意图操作 MAIN。

onPause/onResume() 被调用是由于 NFC 服务向您的活动分派意图的方式。你对此无能为力。事实上,这不应该是您需要在应用程序逻辑中区分的东西。如果调用了onPause,则无论是由于显式用户 UI 交互将某些其他 UI 组件移到您的前面,还是由于系统将某些(不可见)UI 组件移入你的前面。如果您当前的onPause 逻辑确实需要区分两者,那么最好在onStop 中完成。

【讨论】:

  • 当我注意到扫描标签时没有调用它们时,我使用了 onStart/onStop。您的答案加入了我的解决方案,因此我将对其进行验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多