Открыть текущую дочернюю активность из уведомления вместо создания новой - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь сделать уведомление в дочернем действии, которое после нажатия повторно открывает фоновое действие, если оно присутствует, в противном случае оно возвращается к родительскому действию.Родительское действие ожидает результат от дочернего действия (startActivityForResult), поэтому я не могу использовать launchMode singleTop или аналогичный.

Мне это нужно, потому что у дочернего действия есть открытое соединение, которое не может быть прервано.Соединение сохраняется во фрагменте этого дочернего действия с retainInstance, установленным в true:

    connectionFragment = fm.findFragmentByTag(TAG_CONNECTION_FRAGMENT) as ConnectionFragment?
    if (connectionFragment == null) {
        connectionFragment = ConnectionFragment.newInstance()
        fm.beginTransaction().add(connectionFragment, TAG_CONNECTION_FRAGMENT).commit()
    }

Я протестировал много решений, но сейчас вот ожидающее намерение, которое я передаю NotificationBuilder setContentIntent:

PendingIntent.getActivity(
    this,
    0,
    Intent(this, ChildActivity::class.java)
            .setAction(Intent.ACTION_VIEW)
            .addCategory(Intent.CATEGORY_DEFAULT)
            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            .addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
            .putExtra("notification", true),
    0)

Как вы можете видеть, я настраиваю "уведомление" дополнительно, поэтому, когда вызывается onCreate, я могу определить, было ли действие воссоздано (когда findFragmentByTag возвращает ноль), и вернуться к родительскому действию.

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

...