Verwendung der Low-Level-API des benutzerdefinierten Tabs

Die empfohlene Methode zum Einbinden Ihrer Anwendung in benutzerdefinierte Tabs ist die Verwendung der AndroidX Browser Library. Sie können aber auch einen benutzerdefinierten Tab ohne die Support-Bibliothek starten. In diesem Leitfaden erhalten Sie einen Überblick darüber, wie Sie das erreichen können.

Die vollständige Implementierung der Support Library ist auf [GitHub][1] verfügbar und kann als Ausgangspunkt verwendet werden. Es enthält auch die [AIDL-Dateien][2], die für die Verbindung zum Dienst erforderlich sind, da die im Chromium-Repository enthaltenen Dateien nicht direkt mit Android Studio verwendet werden können.

Grundlagen für den Start von benutzerdefinierten Tabs mit der Low-Level-API

// Using a VIEW intent for compatibility with any other browsers on device.
// Caller should not be setting FLAG_ACTIVITY_NEW_TASK or 
// FLAG_ACTIVITY_NEW_DOCUMENT. 
String url = ¨https://paul.kinlan.me/¨;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
//  Must have. Extra used to match the session. Its value is an IBinder passed
//  whilst creating a news session. See newSession() below. Even if the service is not 
//  used and there is no valid session id to be provided, this extra has to be present 
//  with a null value to launch a custom tab.

private static final String EXTRA_CUSTOM_TABS_SESSION = "android.support.customtabs.extra.SESSION";
Bundle extras = new Bundle;
extras.putBinder(EXTRA_CUSTOM_TABS_SESSION, 
   sessionICustomTabsCallback.asBinder() /* Set to null for no session */);
intent.putExtras(extras);

UI-Anpassungen hinzufügen

UI-Anpassungen werden durch Hinzufügen von Extras zum ACTION_VIEW-Intent vorgenommen. Eine vollständige Liste der Extras-Schlüssel, die zum Anpassen der Benutzeroberfläche verwendet werden, finden Sie in der [Dokumentation zu CustomTabsIntent][3]. Ein Beispiel für das Hinzufügen einer benutzerdefinierten Symbolleistenfarbe:

// Extra that changes the background color for the address bar. colorInt is an int
// that specifies a Color.

private static final String EXTRA_CUSTOM_TABS_TOOLBAR_COLOR = "android.support.customtabs.extra.TOOLBAR_COLOR";
intent.putExtra(EXTRA_CUSTOM_TABS_TOOLBAR_COLOR, colorInt);

Verbindung zum Custom Tabs-Dienst herstellen

Der Dienst „Benutzerdefinierte Tabs“ kann auf dieselbe Weise wie andere Android-Dienste verwendet werden. Die Schnittstelle wird mit AIDL erstellt und es wird automatisch eine Proxy-Dienstklasse für Sie erstellt.

Verwenden Sie die Methoden für den Proxy-Dienst, um Warm-up, Sessions und Prefetch zu erstellen und vorab abzurufen:

// Package name for the Chrome channel the client wants to connect to. This
// depends on the channel name.
// Stable = com.android.chrome
// Beta = com.chrome.beta
// Dev = com.chrome.dev
public static final String CUSTOM_TAB_PACKAGE_NAME = "com.chrome.dev";  // Change when in stable

// Action to add to the service intent. This action can be used as a way 
// generically pick apps that handle custom tabs for both activity and service 
// side implementations.
public static final String ACTION_CUSTOM_TABS_CONNECTION =
       "android.support.customtabs.action.CustomTabsService";
Intent serviceIntent = new Intent(ACTION_CUSTOM_TABS_CONNECTION);

serviceIntent.setPackage(CUSTOM_TAB_PACKAGE_NAME);
context.bindService(serviceIntent, mServiceConnection,
                    Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY);    

[1]: https://github.com/GoogleChrome/custom-tabs-client/tree/master/customtabs [2]: https://developer.android.com/guide/components/aidl.html [3]: https://developer.android.com/reference/androidx/browser/customtabs/CustomTabsIntent