2010-08-18 190 views
89

我有一个Android应用,它支持通过其他应用发送文本。因此它使用ACTION_SEND意图和EXTRA_TEXT字段。选择器向我展示了可以处理这种意图的所有应用程序。那些是Twitter,EMail,...和Facebook。但是,当我选择Facebook的它打开浏览器,进入以下页面:通过ACTION_SEND在Android应用上分享Facebook上的文本

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

它显示了我的文字,并提交按钮。但是当我按提交按钮什么都没有发生。该页面只是再次加载。 我想也许只能通过Facebook应用程序发送URL。那可能吗?

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

+4

Facebook的应用程序不正确支持ACTION_SEND,然后请花时间将您的文章添加到以下主题: http://forum.developers.facebook.net/viewtopic.php?id=93900 – 2011-03-23 20:54:22

+0

@Error 454:我已发布在facebook上,但我很好奇画廊中的分享选项如何运作? eck out我的问题http://stackoverflow.com/questions/5692583/post-on-facebook-wall-in-android – rogerstone 2011-04-17 14:14:57

+0

Facebook的Eric Tseng今天在Twitter上向我确认他们正在寻求解决这个问题。希望下一个版本的应用能够正确接受共享文本。 – 2011-05-11 12:50:24

回答

11

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

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

+0

在Facebook版本1.6.1中,它无法正常工作,并且在发送时似乎还有一些错误! – sat 2011-07-26 18:26:12

+0

发布您的代码? – 2011-07-28 15:31:47

+0

它开始工作!不知道是什么问题。感谢它也适用于FB v 1.6.1。 – sat 2011-07-28 17:00:50

2

看来,Facebook应用程序错误地处理了这个意图。最可靠的方式似乎是使用Android的Facebook API。

的SDK是在此链接:http://github.com/facebook/facebook-android-sdk

在 '用法',有这样的:

显示Facebook的对话框。

SDK支持用于用户交互的多个WebView html 对话框,例如 创建墙贴。这旨在提供 以提供快速的Facebook 功能,而无需 实现原生Android UI并通过 API直接将 数据传递给Facebook。

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

+0

嗯,这不是我所要求的,但无论如何感谢提示。我需要添加一个单独的菜单项的facebook分享,使这项工作... – Goddchen 2010-09-15 21:41:32

+0

是啊,我明白你的意思,这是一个婊子,但我有我的应用程序中的ACTION_SEND意图相同的问题,并且Facebook没有修复他们的应用程序,所以thi s似乎是最好的选择 – HXCaine 2010-09-15 23:30:04

+3

我刚刚做了一些更多的搜索,发现有这个问题的人都在互联网上,Facebook根本没有帮助。 http://forum.developers.facebook.net/viewtopic.php?pid=255227 – HXCaine 2010-09-15 23:51:59

51

为了与Facebook的应用程序共享的工作,你只需要拥有suply至少一个链接:

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

+4

“精彩搜索引擎”文本在哪里?那是人们在上面报告的错误,是吗? – 2012-03-21 22:28:14

+3

他在说你只能发布一个链接。没有文字。 “精彩的搜索引擎”文本必须被拿出才能运行。 – chubbsondubs 2012-07-16 19:10:13

+0

如果更新答案,我会+1。截至目前,“Facebook”应用程序将正确地从“Wonderful search engine http:// www.google.fr /'”字符串中提取链接。请注意,我说**拉链接**,它仍然不会对文本做任何事情。另外,Twitter也适用于文本和链接。 – theblang 2014-03-04 15:30:08

0

看起来这是Facebook应用程序中的一个错误,它在2011年4月份被报告,并且尚未由Android Facebook开发人员修复。

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

+2

我认为他们希望你使用网络应用程序与朋友分享共享内容,所以你可以看到de Ads ...我遇到了同样的问题,我会通过facebook api实现Facebbok共享。 – Igor 2012-06-01 06:59:46

28

首先你需要查询意图处理程序共享选项。然后使用包名称来过滤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

+13

使用你仍然无法分享文本(只是链接)在Facebook和Twitter的方式。您必须使用SDK Facebook(Twitter)for Android。 – secretlm 2012-05-06 13:36:55

+0

你好,我试过这个,但它没有显示我想要在Facebook上分享它的消息...任何想法为什么?它让我登录并显示“你脑子里有什么?”提示文字不是我想要分享的文字 – 2013-02-13 16:59:29

+0

这不起作用。它显示与普通(对话)意图相同的空输入。 – Ixx 2013-03-04 13:10:20

11

所以我有一个解决方法,但它假定你有控制t他页你分享......

如果格式化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的逃脱这个URL生成的对话框中,它会读取标题元数据,并把它嵌入到你的共享对话框。

我意识到这是一个非常难吃的解决方案,因此采取与一粒盐...

+0

(加一)用于xkcd参考。 – 2014-12-05 07:21:22

45

06/2013:

  • 这是来自Facebook的错误,而不是你的代码
  • Facebook不会修复这个bug,他们说它是“设计”,他们解除了Android系统的份额:https://developers.facebook.com/bugs/332619626816423
  • 使用SDK或只共享URL。
  • 提示:您可以使用网页标题作为帖子的文本作弊。
+28

非常感谢Faceobook。 – 2013-07-06 17:13:19

+0

感谢@Loda引起我们的注意 – Jigar 2015-04-27 06:34:09

+0

hiii @Loda ...... – 2016-06-09 11:53:11

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 
0

,如果你想显示的文字把在你想要的信息的乞讨如果你访问这个SO发布并感到沮丧的是,它会将你的#标签

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); 

} 
相关问题