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

时间:2010-08-18 18:10:18

标签: android facebook android-intent android-sharing

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

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

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

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

10 个答案:

答案 0 :(得分:51)

要使分享与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"));

这将显示正确的共享窗口,但是当您点击共享时,没有任何事情发生(我也尝试使用官方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"));

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

facebook share

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

如果您只想分享文字,则必须使用facebook api:https://github.com/facebook/facebook-android-sdk

答案 1 :(得分:45)

06/2013:

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

答案 2 :(得分: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;
   }
}

奖金 - 通过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;
   }
}

如果您想了解如何通过其他共享应用程序进行分享,请在Tép Blog - Advance share via Android

找到它

答案 3 :(得分:11)

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

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

答案 4 :(得分:11)

所以我有一个解决方法,但它假设你可以控制你正在分享的页面......

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

String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;

...然后在非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!">

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

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

答案 5 :(得分:2)

似乎Facebook应用程序错误地处理了此意图。最可靠的方式似乎是使用适用于Android的Facebook API。

SDK位于以下链接:http://github.com/facebook/facebook-android-sdk

在'使用'下,有:

  

显示Facebook对话框。

     

SDK支持多个WebView html   用户交互的对话框,例如   创建一个墙贴。这是有意的   提供快速Facebook   功能而不必   实现原生Android UI并传递   数据到Facebook直接通过   的API。

这似乎是最好的方法 - 显示一个会发布到墙上的对话框。唯一的问题是他们可能必须先登录

答案 6 :(得分:1)

Check this out : By this we can check activity results also....
// Open all sharing option for user
                    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
                    sharingIntent.setType("text/plain");                    
                    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ShortDesc+" from "+BusinessName);
                    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, ShortDesc+" "+ShareURL);
                    sharingIntent.putExtra(Intent.EXTRA_TITLE, ShortDesc+" "+ShareURL);
                    startActivityForResult(Intent.createChooser(sharingIntent, "Share via"),1000);
/**
     * Get the result when we share any data to another activity 
     * */
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
        case 1000:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(getApplicationContext(), "Activity 1 returned NOT OK", Toast.LENGTH_LONG).show();
            break;
        case 1002:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
            break;
        }// end switch



    }// end onActivityResult

答案 7 :(得分:1)

ShareDialog shareDialog = new ShareDialog(this);
if(ShareDialog.canShow(ShareLinkContent.class)) {

    ShareLinkContent linkContent = new ShareLinkContent.Builder().setContentTitle(strTitle).setContentDescription(strDescription)
                            .setContentUrl(Uri.parse(strNewsHtmlUrl))
                            .build();
    shareDialog.show(linkContent);

}

答案 8 :(得分:0)

这似乎是Facebook应用程序中的一个错误,该错误已于2011年4月报道,但尚未由Android Facebook开发人员修复。

目前唯一的解决方法是使用他们的SDK。

答案 9 :(得分:0)

如果你想在你想要的消息的乞讨时显示文字,它会将其作为Hashtag分享