Android 共享意图选择器 - 与 Facebook/Twitter 社交媒体等共享文本
Posted
技术标签:
【中文标题】Android 共享意图选择器 - 与 Facebook/Twitter 社交媒体等共享文本【英文标题】:Android Share Intent chooser - Sharing TEXT with Facebook/Twitter Social media etc 【发布时间】:2012-06-07 03:37:34 【问题描述】:如果我只发送文本,分享意图选择器不会提供 Facebook/Twitter 作为选项。
只有 Gmail、Skype 和 Evernote 是选项。
这是我的代码
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("plain/text");
shareIntent.putExtra(Intent.EXTRA_TEXT, text)
startActivity(Intent.createChooser(shareIntent, "Share using"));
我尝试了不同的 setType() 组合,包括“text/*”、“text/html”和在 putExtra 中传递 HTML 文本,如下所示:
shareIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml("<p>This is the text that will be shared.</p>"));
当我使用“text/plain”时,Facebook 会作为一个选项出现,但在选择它时不会加载文本。但文本确实会为 Twitter、电子邮件、SMS 加载。
还有其他人遇到过这个问题吗?
当我分享图片时,没有问题,而且 Facebook 和其他社交媒体应用程序都在列表中。
【问题讨论】:
在这里找到答案***.com/questions/3515198/… 【参考方案1】:根据文档,它还应该是“text/plain”而不是“plain/text”。
【讨论】:
这就是造成问题的原因。谢谢【参考方案2】:这取决于每个应用定义的意图过滤器。
例如,如果我添加意图过滤器
android.intent.action.send
如果我从图库中选择单个图像,我的应用程序将出现在列表中。但是,如果我选择多个,我的应用程序将不会出现,因为我没有为 android.intent.action.send_multiple
添加意图文件管理器
所以这取决于 facebook 过滤的意图。您需要查看发行说明或帮助或开发人员页面。
【讨论】:
我找到了一个深入介绍这一点的页面。通过在我的字符串文本中包含一个 URL。例如。 “嗨,看看bbc.co.ukFacebook 可以识别字符串。奇怪的是只有字符串的 URL 部分。Twitter 可以识别整个字符串以及 URL。***.com/questions/3515198/…【参考方案3】:facebook 问题是 facebook 权限的限制。使用 Facebook API
【讨论】:
【参考方案4】:通过 Twitter 分享:
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, (String)v.getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String)v.getTag(R.drawable.ic_launcher));
// 用于查找 twitter 包名 ---- >>
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList)
if ("com.twitter.android.PostActivity".equals(app.activityInfo.name))
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
通过 Facebook 分享
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,String)v.getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, (String)
v.getTag(R.drawable.ic_launcher));
// finding facebook package name
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList)
if ((app.activityInfo.name).contains("facebook"))
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
通过 Gmail 分享
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT(String)v.getTag(R.string.app_name));
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT(String)v.getTag(R.drawable.ic_launcher));
// finding gmail package name ---
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList)
if ((app.activityInfo.name).contains("gmail"))
final ActivityInfo activity = app.activityInfo;
final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
v.getContext().startActivity(shareIntent);
break;
【讨论】:
是否没有针对所有社交媒体的单一意图过滤器? @TaslimOseni 如果您使用 ACTION_SEND,它将至少显示 Whatsapp、Twitter、Instagram 和 Facebook,而不考虑其他也可以响应该意图操作的应用程序,例如 Gmail。见此链接:developer.android.com/training/sharing/…以上是关于Android 共享意图选择器 - 与 Facebook/Twitter 社交媒体等共享文本的主要内容,如果未能解决你的问题,请参考以下文章