В следующих разделах показано, как проверить, поддерживает ли браузер по умолчанию или любой браузер на устройстве Android пользовательские вкладки.
Проверьте, поддерживает ли браузер по умолчанию пользовательские вкладки.
Чтобы проверить, поддерживает ли браузер по умолчанию пользовательские вкладки, используйте вспомогательный метод getPackageName
в CustomTabsClient
:
String packageName = CustomTabsClient.getPackageName(
context,
Collections.emptyList()
);
if (packageName == null) {
// Custom Tabs are not supported by the default browser
}
Проверьте, поддерживает ли какой-либо браузер на устройстве пользовательские вкладки.
Чтобы проверить, поддерживает ли какой-либо браузер, установленный на устройстве, пользовательские вкладки, вам необходимо запросить приложения, которые могут обрабатывать намерения VIEW
, извлечь имена их пакетов и использовать вспомогательный метод getPackageName
в CustomTabsClient
:
// Get all apps that can handle VIEW intents and Custom Tab service connections.
Intent activityIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(activityIntent, PackageManager.MATCH_ALL);
// Extract package names from ResolveInfo objects
List<String> packageNames = new ArrayList<>();
for (ResolveInfo info : resolveInfos) {
packageNames.add(info.activityInfo.packageName);
}
// Get a package that supports Custom Tabs
String packageName = CustomTabsClient.getPackageName(
context,
packageNames,
true /* ignore default */
);
if (packageName == null) {
// Custom Tabs are not supported by any browser on the device
}
Изменения видимости пакетов Android 11
В Android 11 внесены изменения в видимость пакетов. Если ваше приложение Android предназначено для уровня API 30 или более поздней версии, необходимо добавить следующее объявление в раздел запросов файла AndroidManifest.xml
.
Без этого объявления метод queryIntentActivities
не вернет результаты:
<queries>
<intent>
<action android:name=
"android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
Ни один браузер на устройстве не поддерживает пользовательские вкладки.
Если на устройстве нет браузера, поддерживающего пользовательские вкладки, и вы запускаете URL-адрес с помощью customTabsIntent.launchUrl(context, url)
, намерение может завершиться неудачно, что приведет к исключению ActivityNotFoundException
.
Всегда выполняйте проверку совместимости, чтобы обеспечить лучшее взаимодействие с пользователем.
Вы можете вернуться к стандартному намерению ACTION_VIEW
, чтобы открыть URL-адрес в любом доступном браузере.