Как установить пользовательские вкладки Chrome по умолчанию не должны отображаться «открыть с помощью» - PullRequest
0 голосов
/ 06 марта 2019

Я создал приложение для Android с пользовательскими вкладками Chrome, но когда я нажал кнопку, чтобы отобразить URL, появится диалоговое окно, в котором говорится, что мне нужно выбрать «Открыть с помощью», и список всех приложений браузера, доступных для выбора. , Моя проблема заключается в том, чтобы определить, что приложение устанавливает Chrome только по умолчанию и больше не нужно открывать диалоговое окно «Открыть с помощью».

fab.setOnClickListener {
    val url = "http://myurl.com/"
    val builder = CustomTabsIntent.Builder()
    builder.setToolbarColor(ContextCompat.getColor(this@MainActivity,R.color.colorAccent))
    builder.addDefaultShareMenuItem()

    val anotherCustomTab = CustomTabsIntent.Builder().build()

    val intent = anotherCustomTab.intent
    intent.data = Uri.parse("http://myurl.com/")

    builder.setShowTitle(true)

    val customTabsIntent = builder.build()
    customTabsIntent.launchUrl(this@MainActivity, Uri.parse(url))
}

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Следующий код от здесь , но помните, что мы должны уважать предпочтения пользователя. Под пользовательскими предпочтениями я имею в виду

  1. Если у пользователя есть несколько браузеров, которые поддерживают пользовательские вкладки и не поддерживают есть браузер по умолчанию и один из браузеров Chrome, то мы можем откройте ссылку в Chrome.
  2. Если у пользователя есть несколько браузеров, которые поддерживают пользовательские вкладки и имеет один браузер A по умолчанию и этот браузер A имеет поддержку пользовательских вкладок, мы должны открыть ссылку в этом браузере A.

  3. Если у пользователя есть несколько браузеров, которые поддерживают пользовательские вкладки и не поддерживают есть браузер по умолчанию и один из браузеров не Chrome, то мы может показать диалог выбора с настраиваемыми вкладками, поддерживаемый браузером, чтобы открыть ссылка

Существует также несколько других вариантов использования, но надеюсь, что вы поняли суть этого

Браузер с поддержкой CCT (Atleast с последней версией)

  1. браузер Samsung
  2. Firefox
  3. Microsoft edge

Браузер без поддержки CCT:

  1. Старый браузер, встроенный в более старую версию Android и устройство Android samsung

  2. Opera

  3. DuckDuckGo

    public static String getPackageNameToUse(Context context) {
    
       String packageNameToUse = null;
       final PackageManager packageManager = context.getPackageManager();
       final Intent activityIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
    
       // Get all apps that can handle VIEW intents and have custom tab service
       final List<ResolveInfo> resolvedActivityList = packageManager.queryIntentActivities(activityIntent, 0);
       final List<String> packagesSupportingCustomTabs = new ArrayList<>();
    
       for (final ResolveInfo info : resolvedActivityList)
       {
           final Intent serviceIntent = new Intent();
           serviceIntent.setAction(ACTION_CUSTOM_TABS_CONNECTION);
           serviceIntent.setPackage(info.activityInfo.packageName);
           if (packageManager.resolveService(serviceIntent, 0) != null)
       packagesSupportingCustomTabs.add(info.activityInfo.packageName);
       }
    
       // Now packagesSupportingCustomTabs contains all apps that can handle both VIEW intents
       // and service calls.
       if (packagesSupportingCustomTabs.size() == 1)
        packageNameToUse = packagesSupportingCustomTabs.get(0);
       else if (packagesSupportingCustomTabs.contains(STABLE_PACKAGE))
        packageNameToUse = STABLE_PACKAGE;
    
       return packageNameToUse;
      }
    
0 голосов
/ 06 марта 2019

Я нашел, как это проверить, ссылаясь на это , поэтому я получил этот код и работает, больше не просил устанавливать браузер.

fab.setOnClickListener {

        val PACKAGE_NAME = "com.android.chrome"

        val builder = CustomTabsIntent.Builder()

        builder.setToolbarColor(ContextCompat.getColor(this@MainActivity,R.color.colorAccent))
        builder.addDefaultShareMenuItem()
        builder.setShowTitle(true)

        val anotherCustomTab = builder.build()
        val intent = anotherCustomTab.intent
        intent.data = Uri.parse("http://www.myurl.com/")

        val packageManager = packageManager
        val resolveInfoList = packageManager.queryIntentActivities(anotherCustomTab.intent, PackageManager.MATCH_DEFAULT_ONLY)

        for (resolveInfo in resolveInfoList) {
            val packageName = resolveInfo.activityInfo.packageName
            if (TextUtils.equals(packageName, PACKAGE_NAME))
                anotherCustomTab.intent.setPackage(PACKAGE_NAME)
        }
        anotherCustomTab.launchUrl(this, anotherCustomTab.intent.data)
    }
...