我将我的 Activity 注册为 Intent 过滤器(纯文本)并且在接收多个 Intent 时遇到问题。这是我的情况:
- 我打开电子邮件客户端 -> 标记一些文本 -> 按“共享按钮”并选择正确列出的我的 Activity (因为它已注册为此类操作的 Intent 过滤器)
- 我的 Activity 打开,我可以清楚地看到 Intent 在其 EXTRA_TEXT(来自电子邮件的标记文本)中具有正确的值
- 到目前为止一切顺利...但是现在,如果我按下 HOME 按钮(这会关闭我的 Activity 并且似乎调用了 onStop())-> 然后我再次打开电子邮件客户端 -> 标记一些不同的文本 -> 按“共享”按钮”,然后我的 Activity 突然打开(我希望可用 Activity 列表再次从中选择)并且接收到的Intent bundle 含原始文本,而不是其 EXTRA_TEXT 中新标记的文本。
我在这里错过了什么?如何通过这种方式通过 Intent 接收新内容?我是否需要以某种方式使之前的 Intent 无效?
我不得不说,使用“BACK”而不是“HOME”按钮可以正常工作,并且新Intent bundle 含预期的新标记文本。这里有什么区别?
我这样得到我的 Intent :
intent = getIntent();
intentAction = intent.getAction();
if (intentAction.equals(Intent.ACTION_SEND) && intent.hasExtra(Intent.EXTRA_TEXT)) {
Bundle bundle = intent.getExtras();
谢谢
最佳答案
尝试将您的 Activity launchMode 设置为“singleTop”然后实现...
@Override
protected void onNewIntent (Intent intent) {
...
}
传入该方法的 Intent
应该是新的。
请参阅 onNewIntent 的文档
编辑:对于 future 的读者 - 根据下面的评论,文档似乎不正确并且 launchMode 应该是“singleTask”而不是“singleTop”。
关于android - 如何捕捉新 Intent 而不是旧 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13940874/