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都会被执行。这可能会产生意外错误。
在我最近编写的 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都会被执行。这可能会产生意外错误。