предотвратить запуск системы одним верхним действием с предыдущим намерением - PullRequest
3 голосов
/ 07 февраля 2012

У меня есть активность, которая существует в манифесте, например, так:

<activity android:name=".activity.Main" android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="http" android:host="asdf.com"/>
        </intent-filter>
</activity>

Чтобы перехватывать и обрабатывать ссылки на http://asdf.com. После того, как я обработаю одно из этих намерений, я возвращаюсь из своегоосновная деятельность.

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

Спасибо

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Моя проблема в том случае, когда действие запускается с помощью кнопки «Домой», так что это, кажется, рабочее решение:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) { 
    //handle intent 
};

Этот флаг имеет значение true, если запущен из диспетчера задач, и в этом случае яможет игнорировать данные намерения.Это, вероятно, не будет работать для некоторых других случаев.

1 голос
/ 07 февраля 2012

При повторном входе в приложение, для которого задан режим запуска "singleTask", оно не создает новый экземпляр действия, если оно уже существует, вместо этого оно повторно использует старое действие и переносит его на верх стек. Вы должны перезаписать метод onNewIntent () своей активности, чтобы выполнить любые действия, которые вам могут понадобиться. Когда вы переносите активность в начало стека, вызывается метод onNewIntent (), и вам нужно будет сбросить данные в этой функции.

Подробнее о задачах и стеке назад здесь .

...