моб разраб. Лабораторные работы с 1 по 21. Лабораторная работа Использование значений строк и цветов
Скачать 5.49 Mb.
|
Лабораторная работа «Вызов Активности с помощью явного намерения и получение результатов работы»Создайте новый проект MetroPicker. Добавьте вспомогательную Активность ListViewActivity для отображения и выбора станций метро, в качестве заготовки используйте результаты лабораторной работы «Использование ListView» . Отредактируйте файл разметки res/layout/main.xml: добавьте кнопку выбора станции метро, присвоив идентификаторы виджетам TextView и Button для того, чтобы на них можно было ссылаться в коде. Установите обработчик нажатия на кнопку в главной Активности для вызова списка станции и выбора нужной станции. Напишите нужный обработчик для установки выбранной станции метро в виджет TextView родительской Активности (метод setText виджета TextView позволяет установить отображаемый текст). Не забудьте обработать ситуацию, когда пользователь нажимает кнопку «Назад» (в этом случае «никакой станции не выбрано» и главная Активность должна известить об этом пользователя). Убедитесь в работоспособности созданного приложения, проверив реакцию различные действия потенциальных пользователей. Неявные намерения Неявные намерения используются для запуска Активностей для выполнения заказанных действий в условиях, когда неизвестно (или безразлично), какая именно Активность (и из какого приложения) будет использоваться. При создании Намерения, которое в дальнейшем будет передано методу startActivity, необходимо назначить действие (action), которое нужно выполнить, и, возможно, указать URI данных, которые нужно обработать. Также можно передать дополнительную информацию с помощью свойства extras Намерения. Android сам найдет подходящую Активность (основываясь на характеристиках Намерения) и запустит ее. Пример неявного вызова телефонной «звонилки»: Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:(495)502-99-11")); startActivity(intent); Для определения того, какой именно компонент должен быть запущен для выполнения действий, указанных в Намерениях, Android использует Фильтры Намерений (Intent Filters). Используя Фильтры Намерений, приложения сообщают системе, что они могут выполнять определенные действия (action) с определенными данными (data) при определенных условиях (category) по заказу других компонентов системы. Для регистрации компонента приложения (Активности или Сервиса) в качестве потенциального обработчика Намерений, требуется добавить элемент . Дает возможность указать тип данных, которые может обрабатывать компонент. android:host : имя хоста (например, www.specialist.ru) android:mimetype : обрабатываемый тип данных (например, text/html) android:path : «путь» внутри URI (например, /course/android) android:port : порт сервера (например, 80) android:scheme : схема URI (например, http) Пример указания Фильтра Намерений: При запуске Активности с помощью метода startActivity неявное Намерение обычно подходит только одной Активности. Если для данного Намерения подходят несколько Активностей, пользователю предлагается список вариантов. Определение того, какие Активности подходят для Намерения, называется Intent Resolution. Его задача – определить наиболее подходящие Фильтры Намерений, принадлежащие компонентам установленных приложений. Для этого используются следующие проверки в указанном порядке: Проверка действий. После этого шага остаются только компоненты приложений, у которых в Фильтрах Намерений указано действие Намерения. В случае, если действие в Намерении отсутствует, совпадение происходит для всех Фильтров Намерений, у которых указано хотя бы одно действие. Проверка категорий. Все категории, имеющиеся у Намерения, должны присутствовать в Фильтре Намерений. Если у Намерения нет категорий, то на данном этапе ему соответствуют все Фильтры Намерений, за одним исключением, упоминавшимся выше: Активности, запускаемые с помощью метода startActivity, обязаны иметь категорию android.intent.category.DEFAULT, так как Намерению, использованному в этом случае, по умолчанию присваивается данная категория, даже если разработчик не указал ничего явно. Из этого исключения, в свою очередь, есть исключение: если у Активности присутствуют действие android.intent.action.MAINи категория android.intent.category.LAUNCHER, ему не требуется иметь категорию android.intent.category.DEFAULT. Проверка данных. Здесь применяются следующие правила: Намерение, не содержащее ни URI, ни типа данных, проходит через Фильтр, если он тоже ничего перечисленного не содержит. Намерение, которое имеет URI, но не содержит тип данных (и тип данных невозможно определить по URI), проходит через Фильтр, если URIНамерения совпадает с URI Фильтра. Это справедливо только в случае таких URI, как mailto: или tel:, которые не ссылаются на реальные данные. Намерение, содержащее тип данных, но не содержащее URI подходит только для аналогичных Фильтров Намерений. Намерение, содержащее и тип данных, и URI (или если тип данных может быть вычислен из URI), проходит этот этап проверки, только если его тип данных присутствует в Фильтре. В этом случае URI должен совпадать, либо(!) у Намерения указан URI вида content: или file:, а у Фильтра URI не указан. То есть, предполагается, что если у компонента в Фильтре указан только тип данных, то он поддерживает URI вида content: или file:. В случае, если после всех проверок остается несколько приложений, пользователю предлагается выбрать приложение самому. Если подходящих приложений не найдено, в выпустившей Намерение Активности возникает Исключение. Лабораторная работа «Использование неявных Намерений» Измените проект MetroPicker так, чтобы для запуска Активности ListViewActivity использовалось неявное Намерение с действием (action) , определенным в вашем приложении и имеющем значение "com.example.metropicker.intent.action.PICK_METRO_STATION". Проверьте работу приложения. Определение Намерения, вызвавшего запуск Активности Поскольку объекты типа Intent служат, в том числе, для передачи информации между компонентами одного или нескольких приложений, может возникнуть необходимость в работе с объектом Намерения, вызвавшим Активность к жизни. Для получения доступа к этому объекту используется метод getIntent. Пример: Intent intent = getIntent(); Имея данный объект, можно получить доступ к информации, содержащейся в нем: метод getAction возвращает действие Намерения метод getData возвращает данные Намерения (обычно URI) набор методов для разных типов вида getТИПExtra позволяет получить доступ к типизированным значениям, хранящимся в свойстве extrasНамерения. Примеры: String action = intent.getAction(); Uri data = intent.getData(); Лабораторная работа «Получение данных из Намерения» Модифицируйте методы onCreate двух ваших Активностей из предыдущей лабораторной работы так, чтобы с помощью Toast они показывали действие вызвавшего их Намерения . Проверьте работу приложения: |