使用自訂分頁低階 API

如要將應用程式與自訂分頁整合,建議您使用 AndroidX 瀏覽器程式庫,不過您也可以在沒有支援資料庫的情況下啟動「自訂分頁」。本指南將概略說明如何完成這項作業。

支援資料庫的完整實作可在 GitHub 取得,可做為 起點同時也包含連線至服務所需的 AIDL 檔案,也就是 Chromium 存放區中所包含的程式碼無法直接搭配 Android Studio 使用。

使用 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 自訂項目

只要在 ACTION_VIEW 意圖中加入額外項目,即可包含 UI 自訂功能。完整清單 如要瞭解用於自訂 UI 的其他鍵,請參閱 CustomTabsIntent 文件。範例 如何新增自訂工具列顏色:

// 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); 

連線至自訂分頁服務

「自訂分頁」服務的使用方式與其他 Android 服務相同。介面為 由 AIDL 建立,並會自動為您建立 Proxy 服務類別。

使用 Proxy 服務上的方法進行暖機、建立工作階段及預先擷取:

// 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);