การใช้ API ระดับต่ำของแท็บที่กำหนดเอง

วิธีที่แนะนำในการผสานรวมแอปพลิเคชันกับแท็บที่กำหนดเองคือการใช้ไลบรารีเบราว์เซอร์ AndroidX แต่คุณก็เริ่มแท็บที่กำหนดเองได้โดยไม่ต้องใช้ไลบรารีสนับสนุน คู่มือนี้จะให้ภาพรวมเกี่ยวกับวิธีดำเนินการ

การติดตั้งใช้งานไลบรารีการสนับสนุนทั้งหมดมีอยู่ใน [GitHub][1] และสามารถใช้เป็น จุดเริ่มต้นได้ นอกจากนี้ยังมี [ไฟล์ AIDL][2] ที่จำเป็นต่อการเชื่อมต่อกับบริการ เนื่องจากไฟล์ที่อยู่ในที่เก็บ 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

การปรับแต่ง UI จะรวมอยู่ด้วยโดยการเพิ่มส่วนเสริมไปยัง Intent ACTION_VIEW ดูรายการคีย์ extras ทั้งหมดที่ใช้ปรับแต่ง UI ได้ใน [เอกสารประกอบ CustomTabsIntent][3] ตัวอย่างวิธีเพิ่มสีแถบเครื่องมือที่กำหนดเองมีดังนี้

// 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 และจะสร้างคลาสบริการพร็อกซีให้คุณโดยอัตโนมัติ

ใช้วิธีการในบริการพร็อกซีเพื่อวอร์มอัป สร้างเซสชัน และดึงข้อมูลล่วงหน้า

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