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

时间:2011-10-14 07:46:52

标签: android facebook twitter android-intent

我想让我的Android应用程序的用户在fb,twitter上发布一些数据,并将其通过电子邮件发送给某人。我正在使用Intent.ACTION_SEND。我可以添加电子邮件主题并添加测试作为Intent.EXTRA_TEXT。但我希望将不同的文本发送给不同的应用程序。 就像要发送到Twitter的文本一样短,要发送到Facebook的文本将有链接和镜头描述,并且ein电子邮件具有所有内容。 我怎样才能实现这样的功能? 我最多可以让facebook和twitter使用相同的文字,但与电子邮件中的内容不同。

2 个答案:

答案 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);
            } 
        }