Запуск другой activity не обязательно должен быть односторонним. Вы можете также запустить другую activity и получить обратно результат. Чтобы получить результат, вызовите startActivityForResult() (вместоstartActivity()).

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

Конечно, activity которая отвечает должна быть предназначена для возврата результата. Когда это происходит, то результат посылается как другой Intent объект. Ваша activity  получает его в onActivityResult() методе обратного вызова.

Примечание: Вы можете использовать явные или неявные намерения при вызовеstartActivityForResult(). При запуске одной из ваших собственных activity для получения результата, вы должны использовать явное намерение, чтобы гарантировать, что вы получите ожидаемый результат.

Запустить activity


Нет ничего особенного касательно Intent объекта, используемого при запуске activity для получения результата, но вы должны передать дополнительный целочисленный аргумент вstartActivityForResult() метод.

Целочисленный аргумент это «код запроса», который идентифицирует ваш запрос. Когда вы получаете результирующий Intent, метод обратного вызова предоставляет тот же код запроса, чтобы ваше приложение могло правильно идентифицировать результат, и определить как его обработать.

Например, вот как запустить activity , которая позволяет пользователю выбрать контакт:

 

 

Получить результат


Когда пользователь завершит работу с последующей activity и вернется в приложение, система вызывает для вашей activity onActivityResult() метод. Этот метод имеет три аргумента:

  • Код запроса, который вы передали в startActivityForResult().
  • Код результата задаваемый второй activity . Это либо RESULT_OK если операция прошла успешно, либо RESULT_CANCELED если пользователь отказался и вернулся, или операция по некоторым причинам не удалась.
  • Intent , который несет в себе данные результата.

Например, вот как вы можете обработать результат намерения «выбора контакта»:

 

В этом примере, результирующий Intent возвращаемый Контактами Android, или приложением Люди, обеспечивает ссылку на содержание Uri , которая идентифицирует контакт выбранный пользователем.

Чтобы успешно обработать результат, вы должны понимать формат результата в Intent . Это легко, когда activity возвращающая результат является одной из ваших собственных. Приложения, работающие на Android платформе предлагают свои собственные API интерфейсы, на которые вы можете рассчитывать при получении конкретных результирующих данных. Например, приложение Люди (Контакты приложение со старыми версиями) всегда возвращает результат со ссылкой на содержание (URI), которая идентифицирует выбранный контакт, а приложение Камеры возвращает Bitmap в "data" .

Бонус: Прочитать контактные данные

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

 

Примечание: До Android 2.3 (API Уровнь 9), выполнении запроса, используя Contacts Provider(как показано выше) требовало, чтобы ваше приложение объявило READ_CONTACTS разрешение (см. Безопасность и разрешения). Однако, начиная с Android 2.3, приложение Контакты/Люди предоставляет вашему приложению временное разрешение на чтение из поставщика контактов, когда он вернул вам результат. Временное разрешение относится только к определенному запрашиваемому контакту, так что вы не можете запрашивать контакты, отличные от указанного в ссылке намерения Uri, если вы не объявили READ_CONTACTS разрешение.

Получение результата от activity обновлено: Ноябрь 23, 2015 автором: admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*
Website