android - 如何捕捉新 Intent 而不是旧 Intent ?

标签 android android-intent


我将我的 Activity 注册为 Intent 过滤器(纯文本)并且在接收多个 Intent 时遇到问题。这是我的情况:

  1. 我打开电子邮件客户端 -> 标记一些文本 -> 按“共享按钮”并选择正确列出的我的 Activity (因为它已注册为此类操作的 Intent 过滤器)
  2. 我的 Activity 打开,我可以清楚地看到 Intent 在其 EXTRA_TEXT(来自电子邮件的标记文本)中具有正确的值
  3. 到目前为止一切顺利...但是现在,如果我按下 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/

相关文章:

Android SQLite 更新查询显示错误

java - 工具栏上移

java - Android - 清除 Intent

java - 如何制作Android java全局字符串变量?

java - 错误: java. lang.RuntimeException,如何正确从 Intent 中获取额外内容?

android - transferwd 对象调用可序列化类时应用程序崩溃

Android:如何将 Parcelable 对象传递给 Intent 并使用 bundle 的 getParcelable 方法?

android - 为什么在 LinearLayout 上设置 LayoutDirection 不会立即生效?

android - 具有谷歌视觉的 QR 码扫描仪的自动缩放功能

android - Jenkins android模拟器插件可创建多个虚拟设备