איך בודקים אם במכשיר Android יש דפדפן שתומך בכרטיסיות בהתאמה אישית

בקטעים הבאים מוסבר איך לבדוק אם דפדפן ברירת המחדל או כל דפדפן במכשיר Android תומכים בכרטיסיות בהתאמה אישית.

בודקים אם דפדפן ברירת המחדל תומך בכרטיסיות בהתאמה אישית

כדי לבדוק אם דפדפן ברירת המחדל תומך בכרטיסיות בהתאמה אישית, משתמשים בשיטת העזר getPackageName ב-CustomTabsClient:

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

בודקים אם יש דפדפן במכשיר שתומך בכרטיסיות בהתאמה אישית

כדי לבדוק אם יש דפדפן שמותקן במכשיר שתומך בכרטיסיות בהתאמה אישית, צריך להריץ שאילתה לאפליקציות שיכולות לטפל בכוונות VIEW, לחלץ את שמות החבילות שלהן ולהשתמש ב-method העזר 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.

תמיד כדאי לבצע בדיקת תאימות כדי להבטיח חוויית משתמש טובה יותר.

אפשר להשתמש ב-Intent סטנדרטי של ACTION_VIEW כדי לפתוח את כתובת ה-URL בכל דפדפן זמין.