Как заставить FLAG_ACTIVITY_NEW_TASK игнорировать taskAffinity? - PullRequest
0 голосов
/ 02 февраля 2019

У меня проблема с двумя кнопками в разрабатываемом приложении запуска.Первая кнопка должна запустить встроенный текстовый редактор TotalCommander для отображения определенного текстового файла.Вторая кнопка должна запустить TotalCommander.Поэтому я начал с кода ниже: *

ImageButton button1 = (ImageButton) findViewById(R.id.imageButton1);
button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse("file:///storage/emulated/0/myNotes.txt"), "text/plain");
        startActivity(intent);
    }
});

ImageButton button2 = (ImageButton) findViewById(R.id.imageButton2);
button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent= getPackageManager().getLaunchIntentForPackage("com.ghisler.android.TotalCommander");
        startActivity(intent);
    }
});

... но он работал неожиданным образом:

  1. Первая кнопка открывает текстовый редактор, как и ожидалось.
  2. Затем при нажатии кнопки «Домой» запускается программа запуска, как и ожидалось.
  3. Затем вторая кнопка открывает TotalCommander, как и ожидалось.
  4. Теперь при нажатии кнопки «Назад» отображается текст:редактор, вместо того, чтобы показывать панель запуска .

... так, чтобы быть более конкретным: я хочу, чтобы кнопки использовали отдельные задачи, чтобы переходить назад либо из текстового редактора, либо из TotalCommanderпоказывает лаунчер.(За исключением случаев, когда текстовый редактор был открыт из TotalCommander, в этом случае TotalCommander должен запустить новый экземпляр действия текстового редактора в своей собственной задаче.)

Поэтому я добавил intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) к обеим кнопкам...

ImageButton button1 = (ImageButton) findViewById(R.id.imageButton1);
button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse("file:///storage/emulated/0/myNotes.txt"), "text/plain");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
});

ImageButton button2 = (ImageButton) findViewById(R.id.imageButton2);
button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent= getPackageManager().getLaunchIntentForPackage("com.ghisler.android.TotalCommander");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
});

... но это приводит к тому же поведению.Я предполагаю, что FLAG_ACTIVITY_NEW_TASK игнорируются из-за схожести задач активаций TotalCommander.Как я могу заставить FLAG_ACTIVITY_NEW_TASK игнорировать taskAffinity или изменить taskAffinity соответствующих действий TotalCommander?

...