通过ACTION_SEND在Android App上分享Facebook上的文本
我有一个Android应用程序,它支持通过其他应用程序发送文本。 因此它使用ACTION_SEND intent和EXTRA_TEXT字段。 select器向我展示了可以处理这种意图的所有应用程序。 那些是Twitter,EMail,…和Facebook。 但是当我selectFacebook时,它会打开浏览器并转到以下页面:
http://m.facebook.com/sharer.php?u=mytext
它显示我的文本和提交button。 但是当我按下提交button什么都没有发生。 该页面只是再次加载。 我想也许只能通过Facebook应用程序发送URL。 那可以吗?
有没有人设法通过Facebook Android应用程序通过ACTION_SEND发送文本?
编辑:与Android官方Facebook应用程序的新版本(2011年7月14日) 它工作!
旧:如果用户selectFacebook应用程序进行共享,上述示例不起作用,但是如果用户selectSeesmic应用程序发布到Facebook,则可以工作。 我猜Seesmic比Facebook有更好的Facebook API实现!
为了使分享与Facebook应用程序,您只需要至less有一个链接:
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"));
它会显示下面的窗口,分享button将工作:
显然,它会自动从链接中获取图片和文本来填充共享。
如果你只想分享文本,你将不得不使用facebook api: https : //github.com/facebook/facebook-android-sdk
06/2013:
- 这是来自Facebook的错误,而不是你的代码
- Facebook不会修复这个错误 ,他们说这是“通过devise” ,他们打破了Android共享系统: https : //developers.facebook.com/bugs/332619626816423
- 使用SDK或共享唯一的URL。
- 提示:您可以使用网页标题作为文章的文章作弊。
首先你需要查询意图处理程序共享选项。 然后使用包名来过滤意图,那么我们将只有一个意图处理程序共享选项!
通过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; } }
如果你想find如何通过另一个共享应用程序共享,请在那里findTép博客 – 通过Android提前分享
所以我有一个解决办法,但它假定你有控制你分享的网页…
如果你像这样格式化你的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! eg http://xkcd.com/327/ --> <meta name="title" content="Hey! this is a neat pic!">
然后,当Facebook转义该URL来生成对话框时,它将读取标题元数据并将其embedded到共享对话框中。
我意识到这是一个很好的解决scheme,所以拿一粒盐
Facebook应用似乎错误地处理了这个意图。 最可靠的方式似乎是使用Android的Facebook API。
SDK位于以下链接: http : //github.com/facebook/facebook-android-sdk
在“使用”下面是这样的:
显示一个Facebook对话框。
SDK支持用于用户交互的多个WebView html对话框,例如创build墙贴。 这是为了提供快速的Facebookfunction,而不必实现原生的Android UI,并通过API直接将数据传递给Facebook。
这似乎是做到这一点的最好方法 – 显示一个会贴到墙上的对话框。 唯一的问题是他们可能必须先login
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
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); }
这似乎是2011年4月份报道的Facebook应用程序中的一个错误,目前尚未由Android的Facebook开发者修复。
目前唯一的解决方法是使用他们的SDK。
如果你想显示的文字放在你想要的消息的乞讨它将分享作为Hashtag