NFC 意图在 onNewIntent 之前调用 onPause - 如何知道 onPause 调用的来源?

NFC intent calling onPause before onNewIntent - How to know the origin of the onPause call?

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

因为 activity 在前台,扫描标签时不应该是 paused/resumed,而且我有一些任务必须在 onPause/onResume,可以看到问题了。

getIntent().getAction()总是"MAIN",但一定有办法得到更准确的意图描述吧?或者在输入 onNewIntent() 之前无法知道它是 NFC 意图?

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

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

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

onPause/onResume() 被调用是由于 NFC 服务将意图发送给您的 activity 的方式。你对此无能为力。事实上,这不应该是您需要在应用程序逻辑中加以区分的东西。如果 onPause 被调用,你应该做你通常在那里做的任何事情,不管它是由于显式用户 UI 交互将其他 UI 组件移动到你的前面还是由于系统将一些(不可见的)UI 组件移动到你的前面。如果您当前的 onPause 逻辑确实需要区分两者,那么最好在 onStop.

中完成