通过ACTION_SEND在Android应用中分享Facebook上的文字

God*_*hen 91 android facebook android-intent android-sharing

我有一个Android应用程序,它支持通过其他应用程序发送文本.因此,它使用ACTION_SEND意图和EXTRA_TEXT字段.选择器向我提供了可以处理这种意图的所有应用程序.这些是推特,电子邮件,...和Facebook.但是当我选择Facebook时,它会打开浏览器并转到以下页面:

http://m.facebook.com/sharer.php?u=mytext

它显示我的文本和提交按钮.但是,当我按下提交按钮时,没有任何事情发生.该页面再次加载.我想也许只能通过Facebook应用程序发送URL.可能是吗?

有没有人设法通过Facebook Android应用程序通过ACTION_SEND发送文本?

ol_*_*_er 51

要使Share与facebook应用程序一起使用,您只需要至少有一个链接:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Wonderful search engine http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));
Run Code Online (Sandbox Code Playgroud)

这将显示正确的共享窗口,但是当您单击共享时,没有任何事情发生(我也尝试使用官方Twitter应用程序,它不起作用).

我发现使Facebook应用程序共享工作的唯一方法是只共享没有文本的链接:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));
Run Code Online (Sandbox Code Playgroud)

它将显示以下窗口,共享按钮将起作用:

脸书分享

显然,它会自动从链接中获取图像和文本以填充共享.

如果你只想分享文字,你将不得不使用facebook api:https://github.com/facebook/facebook-android-sdk

  • "精彩的搜索引擎"文本在哪里?这与上面报道的人一样,是吗? (4认同)
  • 他说你只能张贴一个链接.没有文字.必须取出"精彩的搜索引擎"文本才能使其正常工作. (3认同)

Lod*_*oda 45

06/2013:

  • 这是来自Facebook的错误,而不是您的代码
  • Facebook不会修复这个错误,他们说这是"按设计"他们打破了Android共享系统:https://developers.facebook.com/bugs/332619626816423
  • 使用SDK或仅共享URL.
  • 提示:您可以使用网页标题作为帖子的文本作弊.

  • 非常感谢Faceobook.</讽刺> (28认同)

kha*_*ntt 28

首先,您需要查询Intent处理程序共享选项.然后使用包名来过滤Intent然后我们将只有一个Intent那个处理程序共享选项!

通过Facebook分享

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
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;
   }
}
Run Code Online (Sandbox Code Playgroud)

奖金 - 通过Twitter分享

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
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;
   }
}
Run Code Online (Sandbox Code Playgroud)

如果你想找到如何通过另一个共享应用程序分享,请在那里找到它TépBlog - 通过Android进阶分享

  • 使用你仍然不能在Facebook和Twitter上分享文本(只是链接)的方式.您必须使用适用于Android的SDK Facebook(Twitter). (13认同)
  • 但是在twitter上很容易发布文字 (3认同)

Giu*_*sco 11

编辑:随着Android官方Facebook应用程序的新版本(2011年7月14日)IT工作!

OLD:如果用户选择Facebook应用程序进行共享,则上述示例不起作用,但如果用户选择Seesmic应用程序发布到Facebook,则它们可以正常工作.我猜Seesmic比Facebook有更好的Facebook API实现!

  • 自从facebook app 1.6.2版本发布以来,这个答案是错误的:http://developers.facebook.com/bugs/363863587019268 (8认同)

Jos*_*Lee 11

所以我有一个解决方法,但它假设您可以控制您共享的页面...

如果你格式化你的EXTRA_TEXT ......

String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;
Run Code Online (Sandbox Code Playgroud)

...然后在非Facebook应用程序上,您的文本应该如下所示:

http://www.example.com/myPicPage.html?extraText=

嘿!
这是一张整洁的照片!

现在,如果您更新您的网站,使用extraText查询参数的请求将返回页面元数据中extraText的内容.

<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ -->
<meta name="title" content="Hey! this is a neat pic!">
Run Code Online (Sandbox Code Playgroud)

然后当Facebook转义该网址以生成对话框时,它将读取标题元数据并将其嵌入到您的共享对话框中.

我意识到这是一个非常糟糕的解决方案,所以带上一粒盐......