Custom Tab 低レベル API を使用する

アプリをカスタムタブと統合するには、AndroidX ブラウザ ライブラリを使用することをおすすめしますが、サポート ライブラリを使用せずにカスタムタブを開始することもできます。このガイドでは、その方法の概要を説明します。

Support Library の完全な実装は GitHub で入手でき、 出発点になります。また、サービスへの接続に必要な AIDL ファイルも以下に含まれます。 (Chromium リポジトリに含まれる)を Android Studio で直接使用することはできません。

// 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 サービスと同じように使用できます。インターフェースは 自動的に作成され、プロキシ サービス クラスが自動的に作成されます。

プロキシ サービスのメソッドを使用して、ウォームアップ、セッションの作成、プリフェッチを行います。

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