En las siguientes secciones, se muestra cómo confirmar si el navegador predeterminado o cualquier navegador en un dispositivo Android admite las pestañas personalizadas.
Verifica si el navegador predeterminado admite pestañas personalizadas
Para verificar si el navegador predeterminado admite Pestañas personalizadas, usa el método auxiliar getPackageName
en CustomTabsClient
:
String packageName = CustomTabsClient.getPackageName(
context,
Collections.emptyList()
);
if (packageName == null) {
// Custom Tabs are not supported by the default browser
}
Verifica si algún navegador del dispositivo admite las pestañas personalizadas
Para verificar si algún navegador instalado en el dispositivo admite pestañas personalizadas, debes
consultar las apps que pueden controlar intents VIEW
, extraer sus nombres de paquete
y usar el
metodo de ayuda getPackageName
en 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
}
Cambios en la visibilidad de paquetes de Android 11
Android 11 introdujo cambios en la visibilidad de los paquetes. Si tu app para Android se orienta al nivel de API 30 o versiones posteriores, debes agregar la siguiente declaración en la sección de consultas de AndroidManifest.xml
.
Sin esta declaración, el método queryIntentActivities
no mostrará resultados:
<queries>
<intent>
<action android:name=
"android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
Si ningún navegador del dispositivo admite las pestañas personalizadas
Si no hay ningún navegador compatible con las pestañas personalizadas disponible en el dispositivo y inicias una URL con customTabsIntent.launchUrl(context, url)
, es posible que el intent falle, lo que generará un error ActivityNotFoundException
.
Siempre realiza una verificación de compatibilidad para garantizar una mejor experiencia del usuario.
Puedes recurrir a un intent ACTION_VIEW
estándar para abrir la URL en cualquier navegador disponible.