Prüfen, ob ein Android-Gerät einen Browser hat, der benutzerdefinierte Tabs unterstützt

In den folgenden Abschnitten erfahren Sie, wie Sie prüfen, ob der Standardbrowser oder ein anderer Browser auf einem Android-Gerät benutzerdefinierte Tabs unterstützt.

Prüfen, ob der Standardbrowser benutzerdefinierte Tabs unterstützt

Ob der Standardbrowser benutzerdefinierte Tabs unterstützt, können Sie mit der Hilfsmethode getPackageName in CustomTabsClient prüfen:

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

Prüfen, ob ein Browser auf dem Gerät benutzerdefinierte Tabs unterstützt

Wenn Sie prüfen möchten, ob ein auf dem Gerät installierter Browser benutzerdefinierte Tabs unterstützt, müssen Sie nach Apps suchen, die VIEW-Intents verarbeiten können, ihre Paketnamen extrahieren und die Hilfsmethode getPackageName in CustomTabsClient verwenden:

// 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
}

Änderungen an der Sichtbarkeit von Paketen unter Android 11

Mit Android 11 wurden Änderungen an der Sichtbarkeit von Paketen eingeführt. Wenn Ihre Android-App auf API-Level 30 oder höher ausgerichtet ist, müssen Sie die folgende Deklaration im Abschnitt „Abfragen“ der AndroidManifest.xml hinzufügen.

Ohne diese Deklaration gibt die queryIntentActivities-Methode keine Ergebnisse zurück:

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

Kein Browser auf dem Gerät unterstützt benutzerdefinierte Tabs

Wenn auf dem Gerät kein Browser verfügbar ist, der benutzerdefinierte Tabs unterstützt, und Sie eine URL mit customTabsIntent.launchUrl(context, url) öffnen, schlägt die Intent-Aktion möglicherweise fehl und es wird ActivityNotFoundException angezeigt.

Führen Sie immer eine Kompatibilitätsprüfung durch, um die Nutzerfreundlichkeit zu verbessern.

Sie können auf einen standardmäßigen ACTION_VIEW-Intent zurückgreifen, um die URL in einem beliebigen verfügbaren Browser zu öffnen.