1

I have enabled the app link for my app, in some scenarios I want open URL custom chrome tab for some URLs.

CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
        CustomTabsIntent customTabsIntent = builder.build();
        builder.setShowTitle(true);
        Bundle headers = new Bundle();
customTabsIntent.intent.putExtra(Browser.EXTRA_HEADERS, headers);
        customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        customTabsIntent.launchUrl(context, Uri.parse(url));

As suggested in this flowing code can be used open chrome browser is there any way to do the same with custom chrome tab

String data = "example.com/your_url?param=some_param"
Intent defaultBrowser = 
Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, 
Intent.CATEGORY_APP_BROWSER);
defaultBrowser.setData(data);
startActivity(defaultBrowser);
Rahul Devanavar
  • 3,917
  • 4
  • 32
  • 61

1 Answers1

0

You need to set package information to the intent of default custom tab handler. (Like chrome)

val customTabsIntent: CustomTabsIntent = Builder()
      ...
      .build()

customTabsIntent.intent.setPackage(getCustomTabsPackage(context))
private fun getCustomTabsPackage(context: Context): String? {
   val packageManager: PackageManager = context.packageManager
  val activityIntent = Intent(Intent.ACTION_VIEW, Uri.parse("http://"))
  val resolvedActivityList: List<ResolveInfo> = packageManager.queryIntentActivities(activityIntent, 0)

  return resolvedActivityList
    .firstOrNull {
      val serviceIntent = Intent()
      serviceIntent.action = CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION
      serviceIntent.setPackage(it.activityInfo.packageName)
      packageManager.resolveService(serviceIntent, 0) != null
    }
    ?.activityInfo
    ?.packageName
}

More information https://developers.google.com/web/android/custom-tabs/best-practices#preparing_for_other_browsers

Sinan Kozak
  • 3,236
  • 2
  • 26
  • 32