Chrome 自定义标签返回错误的 Intent

Chrome Custom Tabs returning to wrong Intent

在我最近编写的 Android 应用程序中,我发现了一个关于 Chrome 自定义选项卡的问题。我正在使用自定义选项卡打开不同社交媒体平台的网站,例如 Twitter、Twitch、YouTube、Instagram、Snapchat 和 Facebook。

我将简要介绍一下我的应用程序的活动,以便您了解我的问题:

DashboardActivity -> PostActivity -> 打开自定义选项卡

当我使用自定义选项卡打开 Twitter 页面并单击顶部的关闭按钮时,我将被重定向到 PostActivity。这也发生在 Twitter、YouTube 和其他平台上。

但是当我使用自定义选项卡打开 Facebook 页面并关闭该选项卡时,我被重定向到 DashboardActivity,尽管我使用与启动其他页面相同的代码来启动它。

CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();

        switch (view.getId()) {

            case R.id.youtube_content_image: {

                //START YOUTUBE APP
                YouTubePost youtubePost = (YouTubePost) mPosts.get(position);
                String url = "http://www.youtube.com/watch?v=" + youtubePost.getId();

                builder.setToolbarColor(ContextCompat.getColor(getApplicationContext(), R.color.color_youtube));
                CustomTabsIntent customTabsIntent = builder.build();
                customTabsIntent.launchUrl(this, Uri.parse(url));

            }

            case R.id.instagram_content_image: {
                InstagramPost post = (InstagramPost) mPosts.get(position);

                builder.setToolbarColor(ContextCompat.getColor(getApplicationContext(), R.color.color_instagram));
                CustomTabsIntent customTabsIntent = builder.build();
                customTabsIntent.launchUrl(this, Uri.parse(post.getWebLink()));
            }

            case R.id.snapchat_content_text: {
                SnapchatPost post = (SnapchatPost) mPosts.get(position);

                builder.setToolbarColor(ContextCompat.getColor(getApplicationContext(), R.color.color_snapchat));
                CustomTabsIntent customTabsIntent = builder.build();
                customTabsIntent.launchUrl(this, Uri.parse(post.getSnapchatUrl()));

            }

            case R.id.facebook_content_text: {
                FacebookPost post = (FacebookPost) mPosts.get(position);
                String url = "https://www.facebook.com/" + post.getId();

                builder.setToolbarColor(ContextCompat.getColor(getApplicationContext(), R.color.color_facebook));
                CustomTabsIntent customTabsIntent = builder.build();
                customTabsIntent.launchUrl(this, Uri.parse(url));

            }

            case R.id.twitter_content_text: {
                TwitterPost post = (TwitterPost) mPosts.get(position);

                String url = "https://twitter.com/" + mAccountHolder.getTwitterUsername() +"/status/" + post.getId();

                builder.setToolbarColor(ContextCompat.getColor(getApplicationContext(), R.color.color_twitter));
                CustomTabsIntent customTabsIntent = builder.build();
                customTabsIntent.launchUrl(this, Uri.parse(url));
            }
        }

发布的代码缺少每个案例的中断语句。在Java中,switch语句如果不break就会失败,也就是说,第一个匹配到的下面的所有case都会被执行。这可能会产生意外错误。