使用Android意图在Facebook和Twitter上发布不同的文本

我想让我的android应用程序的用户在fb,twitter上发布一些数据,并将它发送给某人。 我为此使用Intent.ACTION_SEND。 我可以添加电子邮件主题,并添加testing作为Intent.EXTRA_TEXT。 但我希望不同的文本被发送到不同的应用程序。 就像要发送到Twitter的文本一样短,要发送到Facebook的文本将有一个链接和一个镜头说明,并在ein电子邮件中有所有的内容。 我怎样才能实现这样的function? 我最多可以让facebook和twitter采取与电子邮件中不同的文字。

首先,创build一个Intent表示你想要什么样的潜在的电子邮件,发布推特等。把一些良好的默认值在Intent.EXTRA_TEXT和主题。 然后用你的意图调用Intent.createChooser() 。 此方法将返回一个Intent,表示用户select了哪个Activity。 现在,在这里添加你想要的定制。 检查如此返回的Intent:

Intent intentYouWantToSend = new Intent(Intent.ACTION_SEND); intentYouWantToSend.putExtra(Intent.EXTRA_TEXT, "Good default text"); List<ResolveInfo> viableIntents = getPackageManager().queryIntentActivities( intentYouWantToSend, PackageManager.MATCH_DEFAULT_ONLY); //Here you'll have to insert code to have the user select from the list of //resolve info you just received. //Once you've determined what intent the user wants, store it in selectedIntent //This details of this is left as an exercise for the implementer. but should be fairly //trivial if(isTwitterIntent(selectedIntent)){ selectedIntent.putExtra(Intent.EXTRA_TEXT, "Different text for twitter"); } else if(isFacebookIntent(selectedIntent)){ selectedIntent.putExtra(Intent.EXTRA_TEXT, "Different text for facebook"); } startActivity(selectedIntent); 

通过检查由Intent.createChooser返回的Intent,我们可以确定在启动之前我们需要如何修改它。 你将不得不实现isTwiterIntent和isFacebookIntent函数自己虽然。 我想这将是相对容易的,因为你可能只需要检查意图的上下文。 我会做更多的研究,看看我是否找不到确切的解决scheme来确定一个意图是Twitter还是Facebook,或者其他什么,并试图给你一个更完整的答案。

 Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("text/plain"); List<ResolveInfo> activities = getPackageManager().queryIntentActivities(sharingIntent, 0); 

通过此代码,您将获得支持Intent.ACTION_SEND操作的应用程序列表。 之后,你可以build立一个警报对话框来显示这些应用程序。

然后单击特定应用程序的监听器,您可以按照给定的代码进行更改

 public void onClick(DialogInterface dialog, int which) { ResolveInfo info = (ResolveInfo) adapter.getItem(which); if(info.activityInfo.packageName.contains("facebook")) { shareToFacebook(); } else { Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setClassName(info.activityInfo.packageName, info.activityInfo.name); sharingIntent.setType("text/plain"); sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "hello"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "intent"); startActivity(sharingIntent); } }