Я просматриваю Руководства для разработчиков Android и обнаружил строку кода, которую я не понимаю.
Это строка кода (находится на 4-й странице учебных пособий для разработчиков Android).
Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
У меня есть пара вопросов.
1) Intent.ACTION_VIEW
документация говорит, что он просто отображает данные для пользователя. Я понимаю, что выбранное приложение будет зависеть от типа отображаемых данных. Например, в этом случае веб-страница анализируется как тип данных URI. Но что за неявное намерение создается здесь? В серверной части я могу думать об Android как о прохождении всех классов в моем телефоне и о том, какой из них имеет фильтр намерений, который может обрабатывать данные, и создании структуры намерений для запуска найденного им класса?
2) Что произойдет, если он найдет несколько классов, которые могут справиться с этим? Он просто выбирает значение по умолчанию или просит пользователя выбрать, в каком приложении он хочет работать? Когда я запустил код на своем телефоне, он просто запустил интернет-приложение Samsung по умолчанию.
3) Это на самом деле мой главный вопрос. Если намерение уже было связано с классом для начала, зачем вообще беспокоиться о intent.resolveActivity(getPackageManager())
? Его документация определяет, как он обрабатывает класс, если класс возвращается. Итак, класс возвращается. Но также этот класс, который он возвращает, не «включен» в мой intent
ни в одну строку моего кода, что заставляет меня думать, что Intent.ACTION_VIEW
каким-то образом уже обработал его для меня.
Это будет скачком, но могу ли я сказать, что Intent.ACTION_VIEW
выполняет intent.resolveActivity(getPackageManager())
или другую функцию, которая выполняет аналогичные функции и каким-то образом включает класс, который возвращается в мои намерения?
4) Кроме того, из любопытства, что находится внутри класса менеджера пакетов ? Я прочитал здесь , что это похоже на каталог данных приложения. Буду ли я прав, сказав это? Какие данные хранятся о приложении и как я могу получить к ним доступ. Документация, кажется, не очень помогает.