Очистка данных getIntent () при использовании активности singleTask - PullRequest
0 голосов
/ 07 ноября 2019

Мое приложение может получать новые файлы, используя намерения «открыть файл»:

<activity android:launchMode="singleTask" >
    <intent-filter android:label="Text document" android:priority="1">
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="content"/>
        <data android:scheme="file"/>
        <data android:host="*"/>
        <data android:mimeType="*/*"/>
        <data android:pathPattern=".*\\.txt"/>
    </intent-filter>
</activity>

Фактические данные обрабатываются с помощью методов onCreate или onNewIntent:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // process intent data using getIntent().getData();
    // When the app is started from a file request then the intent contains the file data.

    // Settings the intent to some dummy data after processing to prevent getting the same data
    // when the task is brought back again from background does not work:
    setIntent(new Intent());
}

Когда задача уже запущена, это называется:

@Override
public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // process intent data here using intent.getData();
}

Все это прекрасно работает, если приложение не перезапускается из фонового средства просмотра выбора Android («недавний список приложений»). Каждый раз, когда приложение запускается из средства просмотра выбора задач, getIntent().getData() сбрасывается на исходные данные, что заставляет мое приложение снова получать те же данные файла.

Точнее, это шаги:

  1. Запустите приложение, щелкнув файл * .txt. onCreate получает информацию о файле.
  2. Нажмите кнопку «назад», чтобы выйти из приложения.
  3. Откройте окно просмотра задач Android и нажмите на скриншот моего приложения. onCreate снова получает ту же информацию о файле. Как это можно предотвратить?

Проблема не возникает здесь:

  1. Запустите приложение, щелкнув файл * .txt. onCreate получает информацию о файле.
  2. Нажмите кнопку «назад» для выхода из приложения.
  3. Теперь я нажимаю значок моего приложения в панели запуска Android. onCreate не возвращает информацию о файле снова. Это то, что я хочу.

Есть ли способ очистить объект getIntent(), чтобы он не сбрасывался при каждом создании моего приложения?

С уважением,

1 Ответ

0 голосов
/ 07 ноября 2019

Я нашел рабочее решение:

if (((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)) == 0) {
  // process intent data
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...