روش پیشنهادی برای ادغام برنامه شما با تبهای سفارشی، استفاده از کتابخانه مرورگر AndroidX است، اما میتوانید بدون کتابخانه پشتیبانی نیز یک تب سفارشی راهاندازی کنید. این راهنما مروری بر نحوه دستیابی به این هدف ارائه میدهد.
پیادهسازی کامل کتابخانه پشتیبانی در [GitHub][1] موجود است و میتواند به عنوان نقطه شروع مورد استفاده قرار گیرد. همچنین شامل [فایلهای AIDL][2] مورد نیاز برای اتصال به سرویس است، زیرا فایلهای موجود در مخزن Chromium مستقیماً با Android Studio قابل استفاده نیستند.
اصول اولیه راهاندازی تبهای سفارشی با استفاده از 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);
افزودن شخصیسازیهای رابط کاربری
سفارشیسازیهای رابط کاربری با اضافه کردن Extras به ACTION_VIEW Intent انجام میشود. لیست کاملی از کلیدهای extras مورد استفاده برای سفارشیسازی رابط کاربری را میتوانید در [مستندات 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);
اتصال به سرویس تبهای سفارشی
سرویس Custom Tabs میتواند به همان روشی که سایر سرویسهای اندروید استفاده میشوند، مورد استفاده قرار گیرد. رابط کاربری با 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