Controllare se un dispositivo Android ha un browser che supporta Custom Tabs

Le seguenti sezioni spiegano come verificare se il browser predefinito o qualsiasi browser su un dispositivo Android supporta Custom Tabs.

Verificare se il browser predefinito supporta Custom Tabs

Per verificare se il browser predefinito supporta Custom Tabs, utilizza il metodo di assistenza getPackageName in CustomTabsClient:

String packageName = CustomTabsClient.getPackageName(
        context,
        Collections.emptyList()
);
if (packageName == null) {
    // Custom Tabs are not supported by the default browser
}

Controlla se un browser sul dispositivo supporta Custom Tabs

Per verificare se un browser installato sul dispositivo supporta Custom Tabs, devi eseguire una query per trovare le app che possono gestire gli intent VIEW, estrarre i relativi nomi del pacchetto e utilizzare il metodo di assistenza getPackageName in 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
}

Modifiche alla visibilità dei pacchetti di Android 11

Android 11 ha introdotto modifiche alla visibilità dei pacchetti. Se la tua app per Android ha come target il livello API 30 o versioni successive, devi aggiungere la seguente dichiarazione nella sezione delle query del AndroidManifest.xml.

Senza questa dichiarazione, il metodo queryIntentActivities non restituirà risultati:

<queries>
    <intent>
        <action android:name=
            "android.support.customtabs.action.CustomTabsService" />
    </intent>
</queries>

Nessun browser nel dispositivo supporta Custom Tabs

Se sul dispositivo non è disponibile alcun browser che supporti Custom Tabs e avvii un URL utilizzando customTabsIntent.launchUrl(context, url), l'intent potrebbe non riuscire, generando un ActivityNotFoundException.

Esegui sempre un controllo di compatibilità per garantire una migliore esperienza utente.

Puoi eseguire il fallback a un Intent ACTION_VIEW standard per aprire l'URL in qualsiasi browser disponibile.