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 передача изображения из альбома в "My First App" приводит к тому, что MainActivity становится частью задачи альбома. Это желаемое поведение.

В Lollipop при передаче изображения из альбома в "My First App" запускается новый экземпляр "My First App". Если я посмотрю на обзорный экран, там будет задание альбома... а затем есть отдельная запись для "My First App". Если я поделюсь другим изображением, я получу два экземпляра "Моего первого приложения"... и т. Д.

Вопрос: Как мне сделать так, чтобы Lollipop обрабатывал намерение общего ресурса так же, как KitKat?

Вот что я сделал: я заметил, что для намерений, отправленных из альбома, установлены разные флаги в зависимости от ОС. (Я получил это с помощью getIntent() и глядя на mFlags.)

Кит-Кат: 0x80001 (524289): FLAG_GRANT_READ_URI_PERMISSION, FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

Леденец: 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:documentLaunchMode в деятельности в AndroidManifest.xml безуспешно.

С http://developer.android.com/reference/android/R.attr.html, использование documentLaunchMode "никогда" кажется многообещающим, так как

Это действие не будет запущено в новый документ, даже если Intent содержит Intent.FLAG_ACTIVITY_NEW_DOCUMENT. Это дает писателю деятельности полный контроль над тем, как используется его деятельность. но это не сработало.

Я тоже считала android:taskAffinity, но, кажется, нет способа сказать "пожалуйста, предпочитайте любую задачу, которую вы начали".

1 ответ

Решение

Боюсь, что вы ничего не можете с этим поделать. Это не под вашим контролем. Это изменение в способе, которым приложение "Альбом" запускает свое "общее" намерение. Если он не хочет, чтобы ваша Активность выполняла свою задачу, вы не можете заставить ее там.

Если у вас есть проблемы с наличием нескольких экземпляров вашей активности "общий доступ", вы можете объявить свою активность "общий доступ" как launchMode="singleTask" или же launchMode="singleInstance" (в зависимости от ваших потребностей. Это может, однако, сломать другие вещи.

Другие вопросы по тегам