Откройте CustomTabIntent с приложением с поддержкой AppLink - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь добавить CustomTabIntent в свое приложение, чтобы открыть URL моего сайта.Проблема в том, что я внедрил AppLinking в свое приложение, из-за чего вкладка Chrome не появляется и перенаправляется в мой класс обработчика deeplink, который перенаправляет мой URL-адрес в chrome.

Я использовал следующий код для CustomTabIntent,

CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder()
            .setToolbarColor(ContextCompat.getColor(this, R.color.colorPrimary))
            .setSecondaryToolbarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark))
            .setShowTitle(true)
            .addDefaultShareMenuItem()
            .setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left)
            .setExitAnimations(this, android.R.anim.slide_in_left,
                    android.R.anim.slide_out_right);
    CustomTabsIntent customTabsIntent = builder.build();
    customTabsIntent.launchUrl(this, Uri.parse(url));

Это способ, которым я могу обойти applink, чтобы открыть CustomTabIntent?

1 Ответ

0 голосов
/ 07 июня 2018

Да, вы можете установить имя пакета приложения, которое вы хотите открыть, открыв внутренний Intent внутри CustomTabsIntent и вызвав setPackageName.

String packageName = "...";
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder()
        .setToolbarColor(ContextCompat.getColor(this, R.color.colorPrimary))
        .setSecondaryToolbarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark))
        .setShowTitle(true)
        .addDefaultShareMenuItem()
        .setStartAnimations(this, R.anim.slide_in_right, R.anim.slide_out_left)
        .setExitAnimations(this, android.R.anim.slide_in_left,
                android.R.anim.slide_out_right);
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.intent.setPackage(packageName);
customTabsIntent.launchUrl(this, Uri.parse(url));

С этого момента вы, должно быть, задаетесь вопросом, какузнайте, какое имя пакета установить при открытии пользовательской вкладки.Несмотря на то, что вы можете жестко закодировать имя пакета для определенного браузера, например:

customTabsIntent.intent.setPackageName("com.android.chrome");

Но, поскольку другие браузеры, такие как Firefox и Samsung, также поддерживают CustomTabs, в идеале вы захотите узнать, какие из них установленыи используйте один из них.

В этом может помочь следующий код:

public static ArrayList getCustomTabsPackages(Context context) {
    PackageManager pm = context.getPackageManager();
    // Get default VIEW intent handler.
    Intent activityIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));

    // Get all apps that can handle VIEW intents.
    List resolvedActivityList = pm.queryIntentActivities(activityIntent, 0);
    ArrayList packagesSupportingCustomTabs = new ArrayList<>();
    for (ResolveInfo info : resolvedActivityList) {
        Intent serviceIntent = new Intent();
        serviceIntent.setAction(ACTION_CUSTOM_TABS_CONNECTION);
        serviceIntent.setPackage(info.activityInfo.packageName);
        // Check if this package also resolves the Custom Tabs service.
        if (pm.resolveService(serviceIntent, 0) != null) {
            packagesSupportingCustomTabs.add(info);
        }
    }
    return packagesSupportingCustomTabs;
}

Это можно использовать в сочетании с CustomTabsClient.getPackageName для выбора пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...