OnActivityResult не вызывается для уже запущенной активности

У меня есть приложение с 3 слоями. А, Б, В. A и B фиксированы, а C может быть любым из множества действий.

Приложение обычно работает в направлении A>B>C. A вызывает B с помощью метода startActivityForResult. B также вызывает C с startActivityForResult, а результат C обрабатывается в B и передается обратно в A с помощью методов onActivityResult на всех слоях.

Он отлично работает, но я почему-то хочу, чтобы действие A вызывало C напрямую (где я реализовал поток для выполнения действий в фоновом режиме), используя

Intent i = new Intent("com.intentntfiltername.ACVITIY-C");
startActivity(i);

Затем C переключается обратно на A, возобновляя его. После этого A вызовет B для получения результата. B затем вызовет C, используя

intentName.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intentName, requestCodeVariable);

это не создаст новый экземпляр Activity C, а вместо этого возобновит старое действие.

Проблема в том, что когда я возвращаюсь к B после выхода из C, onActivityResult никогда не вызывается. Он просто возобновляет активность B без обработки каких-либо результатов от C.

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

Подскажите пожалуйста как это реализовать. Или любой другой обходной путь, только если это невозможно для уже запущенной активности.


person user2212736    schedule 26.11.2014    source источник
comment
Почему бы C не быть создан снова? каждый раз, когда вы из C вы заканчиваете это. поэтому в любое время, когда вы находитесь в A или B, экземпляр C завершен и не существует.   -  person elmorabea    schedule 26.11.2014
comment
Никакой C не приостановлен. Я не выхожу из него после вызова через A. Он вызывает A, не выходя из себя. Он вызывает A с тем же FLAG_ACTIVITY_REORDER_TO_FRONT.   -  person user2212736    schedule 26.11.2014
comment
Почему бы тебе не закончить это? и почему вы открываете действие для результата, а затем переходите к предыдущему действию, используя флаг, например REORDERED TO FRONT? вам следует перепланировать свою навигацию более эффективно   -  person elmorabea    schedule 26.11.2014
comment
Поскольку это действие получило доступ к аппаратному модулю захвата отпечатков пальцев, подключенному к USB-порту телефона. Инициализация этого оборудования занимает 5-6 секунд. Если я закрываю действие, его нужно повторно инициализировать каждый раз, когда я хочу использовать оборудование. Также по какой-то причине сохранение состояния инициализации также невозможно.   -  person user2212736    schedule 27.11.2014


Ответы (1)


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

Intent intent = new Intent();
intent.putExtra("email", email);
act.setResult(RESULT_OK, intent);
act.finish();

где возвращаемое значение, которое мне нужно, — это, конечно, электронная почта, а «действие» — это действие, которое я создал в onCreate как

act = this;
person tibbi    schedule 26.11.2014
comment
Да, это то, что я делаю. Но это не работает в случае, когда действие, требуемое для результата, уже выполнялось. - person user2212736; 26.11.2014
comment
если он работает, он, вероятно, не был закрыт должным образом в прошлый раз, нет? Убедитесь, что вы вызываете finish(), если хотите закрыть его. - person tibbi; 26.11.2014
comment
Да, он запущен, и я хочу, чтобы он продолжал работать и возобновлял работу, когда мне это нужно. Он работает так, как я хочу. Он просто не возвращает результат, когда я его закрываю. - person user2212736; 26.11.2014