我想让我的Android应用程序的用户在fb,twitter上发布一些数据,并将其通过电子邮件发送给某人。我正在使用Intent.ACTION_SEND。我可以添加电子邮件主题并添加测试作为Intent.EXTRA_TEXT。但我希望将不同的文本发送给不同的应用程序。 就像要发送到Twitter的文本一样短,要发送到Facebook的文本将有链接和镜头描述,并且ein电子邮件具有所有内容。 我怎样才能实现这样的功能? 我最多可以让facebook和twitter使用相同的文字,但与电子邮件中的内容不同。
答案 0 :(得分:6)
首先,创建一个Intent,表示您想要发送电子邮件的内容,发布Twitter等。在Intent.EXTRA_TEXT和主题中放置一些好的默认值。然后用你的意图打电话Intent.createChooser()。此方法将返回一个Intent,表示用户选择的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函数。我想这会相对简单,因为你可能只需要检查Intent的上下文。我会做更多的研究,看看我是否找不到一个确切的解决方案,以确定Intent是用于推特或Facebook,还是其他什么,并尝试给你一个更完整的答案。
答案 1 :(得分:0)
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
List<ResolveInfo> activities = getPackageManager().queryIntentActivities(sharingIntent, 0);
通过此代码,您将获得支持Intent.ACTION_SEND操作的应用程序列表。 之后,您可以构建一个警报对话框来显示这些应用程序。
然后在特定应用程序的单击侦听器上,您可以按给定代码进行更改
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);
}
}