Cómo verificar si un dispositivo Android tiene un navegador que admite pestañas personalizadas

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.