Я пытаюсь сделать уведомление в дочернем действии, которое после нажатия повторно открывает фоновое действие, если оно присутствует, в противном случае оно возвращается к родительскому действию.Родительское действие ожидает результат от дочернего действия (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 возвращает ноль), и вернуться к родительскому действию.
Я открыт, чтобы найти обходной путь для этой проблемы, если нет возможности повторно открыть запущенную активность в фоновом режиме.