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

5
在启用了前台调度的应用程序中扫描 NFC 标签时,在调用 onNewIntent() 方法之前,将调用 onPause() 方法。我能否在 onPause() 方法中获取已经存在的 NFC intent,以便根据 intent 的来源停止或不停止进程?
由于活动处于前台状态,并且在扫描标签时不应暂停/恢复,因此我必须在 onPause/onResume 中停止或启动任务,这就是问题所在。 getIntent().getAction() 总是 "MAIN",但肯定有一种方法可以获得更准确的 intent 描述,或者在进入 onNewIntent() 之前无法知道它是一个 NFC intent 吗?

请粘贴您的意图过滤器。我猜想您的意图过滤器出现了问题。 - Akash
这不是IntentFilter的问题。NFC的IntentFilter仅在onNewIntent()方法中读取,而在onPause()中不存在。我需要能够检测到是系统还是用户调用了onPause()。 - zuokuok
在Tap NFC时不应调用onPause.. 你确定你的NFC事件正在生成吗? - Akash
1个回答

7

不,您无法在调用onNewIntent()方法之前知道新意图的内容。这就是onNewIntent()回调的目的:将有关新意图的信息传递给您的活动。只有在调用此方法时,您才可以通过该方法的intent参数获取新意图:

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

请注意,getIntent()方法将始终返回最初启动您的Activity的意图,除非您使用setIntent(newintent)明确更新该意图。因此,如果您通过启动器启动了Activity,则会获得意图操作MAIN。
由于NFC服务将意图分派给您的Activity的方式,因此会调用onPause/onResume()。这是您无法控制的。实际上,在应用程序逻辑中不需要区分这一点。如果调用了onPause,则应该执行您通常在此处执行的任何操作,而不管是由于显式用户UI交互将某些其他UI组件移动到您的UI组件之前还是由于系统将某些(不可见)UI组件移动到您的UI组件之前。如果您当前的onPause逻辑确实需要区分这两种情况,则可能更好地在onStop中完成。

当我注意到在扫描标签时不会调用它们时,我使用了onStart/onStop。您的答案与我的解决方案相结合,因此我将对其进行验证。 - zuokuok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接