КЛЮЧ: Когда ты знаешь, а когда не знаешь
Явное намерение:
Используйте явное намерение, когда точно знаете, какой Activity
может обработать ваш запрос.
Пример: у вас есть действие «Список», и когда вы щелкаете элемент в списке, он открывает действие «Деталь». В этом случае вы ЗНАЕТЕ , что сведения об элементе могут быть показаны или обработаны DetailActivity.class
вашего приложения.
Таким образом, чтобы выполнить это действие, вы создаете Intent, явно указав имя класса.
Intent showDeatil = new Intent(this,DetaiActivy.class);
startActivity(showDeatil);
Скрытое намерение :
Используйте неявное намерение, когда вы не знаете, какая деятельность какого приложения / приложений может обработать ваш запрос.
Пример: у вас есть ссылка. Когда вы нажимаете на ссылку, она должна открывать веб-страницу в каком-либо браузере. Вы НЕ ЗНАЕТЕ , какие именно действия, в которых приложение может обработать ваш запрос. Вы просто имеете смутное представление, что это ссылка на веб-страницу, поэтому она должна открывать веб-страницу в каком-либо браузере, когда кто-то ее открывает. В этом случае вы просто указываете ДЕЙСТВИЕ, а остальная часть заботится об ОС.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
БОНУС:
Как решает ОС?
Для этого есть термин. Это называется намеренным разрешением.
Намеренное разрешение.
ОС принимает ДЕЙСТВИЕ, указанное в вашем намерении.
Заходит в PackageManager и ищет все зарегистрированные
действия с соответствующими действиями все приложения, установленные на вашем устройстве.
Показывает список всех соответствующих приложений во всплывающем окне.
Более безопасный способ написания неявных намерений.
Иногда возможно, что не будет никакой активности, соответствующей действию. В этом случае вы получите исключение NullPointerException. Так что более предпочтительный способ это
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
Как заставить ваше приложение попасть в этот всплывающий список?
Допустим, вы написали какое-то приложение для браузера. Если вы хотите, чтобы ваши приложения отображались во всплывающем списке, когда кто-то открывает ссылку. Затем вам нужно зарегистрировать свою активность с действием, используя файл Intent Filters AndroidManifest.xml. Вот так.
<application
..... >
......
<activity android:name=".YourBrowserActivity">
<action android:name="android.intent.action.VIEW" />
<data android:scheme="http" android:host="www.example.com" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
.....
</application>
Ссылки
Список общих намерений и список их фильтров-намерений
Подробнее о фильтрах намерений и разрешении намерений