2014-06-05 2 views
1

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

Проблема заключается в том, что у моего приложения есть процесс аутентификации, и если я обрабатываю вызов с активностью входа, и пользователь уже прошел аутентификацию в моем приложении, мне придется закрыть активность входа, откройте действие, которое запрашивает для данных и потерять шанс вернуть результат во внешнее приложение, используя setResult.

Есть ли способ отправить результат обратно в приложение-получатель из другого действия, которое обрабатывает фильтр-замысел?

Также меня спрашивали, можно ли вызвать мое приложение на другую задачу, то есть не иметь активности моего приложения, входящего в один и тот же процесс приложения-вызывающего.

ответ

2

Вы можете использовать функцию пересылки результатов, чтобы делать то, что вы хотите. Если ActivityA вызывает ActivityB с startActivityForResult(), а ActivityB необходимо запустить ActivityC для фактического получения данных, ActivityB может вызвать startActivity() с Intent, содержащим Intent.FLAG_ACTIVITY_FORWARD_RESULT. Когда ActivityC завершается, результат возвращается непосредственно в ActivityA (при условии, что ActivityB также завершен). Это отвечает на первую часть вашего вопроса.

Во второй части вашего вопроса, вы спросите

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

Вы использовали термины «задача» и «процесс», как если бы они были одним и тем же. В Android они не одно и то же.

  • «Процесс» - это процесс операционной системы. В общем случае, если ActivityA и ActivityB не используют один и тот же идентификатор пользователя операционной системы (то есть: они не из одного и того же пакета или из одного и того же приложения), 2 действия будут выполняться в разных операционных системах.

  • «Задача» - это последовательность действий, которая может исходить из совершенно разных приложений/пакетов и может работать в совершенно разных операционных системах. Если вы хотите использовать startActivityForResult(), чтобы передать данные из одной активности в другую, 2 действия должны выполняться в одной задаче, хотя они не должны запускаться в том же процессе операционной системы.

+0

Прежде всего, спасибо за ваш быстрый ответ и извините за ошибку процесса и задачи, я имел в виду запуск в двух разных задачах. Чтобы реализовать это, я думал об использовании широковещательного приемника, чтобы отправить его из своего приложения, после завершения работы и разрешить вызывающему абоненту обрабатывать его. – Victor

+0

Вы можете, конечно, общаться между действиями, используя трансляции Intents. Это будет работать по разным задачам. Тем не менее, пользовательская навигация с несколькими задачами может быть сложной, особенно если пользователь нажимает кнопку HOME и пытается вернуться в приложение (в списке последних заданий будет 2 задачи), и пользователь может не знать, что является правильным один для возвращения. Вам просто нужно помнить об этом. –

Смежные вопросы