棒棒糖:让我的活动留在启动共享意图的任务中

时间:2015-01-14 22:57:46

标签: android android-intent android-5.0-lollipop

“我的第一个应用程序”有一个处理“共享”意图的活动。它在AndroidManifest.xml中的活动如下所示:

    <activity
        android:name="com.example.foo.myfirstapp.MainActivity"
        android:label="@string/app_name">
        <intent-filter>
          <action android:name="android.intent.action.SEND"/>
          <category android:name="android.intent.category.DEFAULT"/>
          <data android:mimeType="image/jpeg"/>
        </intent-filter>

    </activity>

在KitKat中,将相册中的图像共享到“我的第一个应用程序”会导致MainActivity成为相册任务的一部分。这是期望的行为。

在Lollipop中,将相册中的图像共享到“我的第一个应用程序”会导致启动“我的第一个应用程序”的新实例。如果我查看概述屏幕,相册任务就在那里......然后是“我的第一个应用程序”的单独条目。如果我分享另一张图片,我最后会看到两个“我的第一个应用程序”......等等。

问题:如何以与KitKat相同的方式让Lollipop处理共享意图?

这就是我所做的: 我注意到从Album发送的意图根据操作系统设置了不同的标志。 (我使用getIntent()并查看mFlags获得了这些内容。)

Kitkat:0x80001(524289):FLAG_GRANT_READ_URI_PERMISSION,FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

Lollipop:0x18080001(403177473):FLAG_GRANT_READ_URI_PERMISSION,FLAG_ACTIVITY_MULTIPLE_TASK,FLAG_ACTIVITY_NEW_DOCUMENT,FLAG_ACTIVITY_NEW_TASK

从阅读http://developer.android.com/reference/android/content/Intent.html开始,似乎最后三个标志导致了问题。具体地

  

当与FLAG_ACTIVITY_MULTIPLE_TASK配对时,修改这两种行为(FLAG_ACTIVITY_NEW_DOCUMENT或FLAG_ACTIVITY_NEW_TASK)以跳过搜索匹配任务并无条件地启动新任务。

我一直试图通过在android:launchMode中的活动中指定android:documentLaunchModeAndroidManifest.xml来“覆盖”这些标记,但没有成功。

http://developer.android.com/reference/android/R.attr.html#documentLaunchMode开始,使用documentLaunchMode“never”似乎很有希望,因为

  

即使Intent包含Intent.FLAG_ACTIVITY_NEW_DOCUMENT,此活动也不会启动到新文档中。这使活动作者能够最终控制其活动的使用方式。   但这没用。

我也考虑过android:taskAffinity,但似乎没有办法说“请更喜欢你发起的任何任务”。

1 个答案:

答案 0 :(得分:1)

害怕你对此无能为力。它不在你的控制之下。这是“相册”应用程序启动其“共享”意图的方式的变化。如果它不希望你的Activity在其任务中,你就不能强迫它在那里。

如果您遇到“共享”活动的多个实例时遇到问题,可以将“共享”活动声明为launchMode="singleTask"launchMode="singleInstance"(具体取决于您的需求。但是,这可能会中断其他的事情。