通过Facebook分享意图为android果冻豆

时间:2013-02-22 13:17:09

标签: android eclipse android-intent

我想通过Facebook从android jelly bean分享一些图片和文字。除了android jelly bean之外,它适用于所有设备。有人请帮我解决这个问题。

我的代码

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

                System.out.println("package name"+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;

在这段代码中,我想要一些文字。但EXTRA_TEXT无效。如何在此EXTRA_TEXT中传递字符串或图像。

3 个答案:

答案 0 :(得分:6)

您不仅应该直接定位Facebook。

相反,您应该只使用Share Intent。按照SDK中指定的额外内容传递数据,然后让用户选择要与之共享的内容。不要强迫他们使用Facebook,因为他们唯一的社交媒体。 Theres还有twitter,4square以及用户使用的许多其他内容。让这些应用程序处理您的意图,不要指定如此严格的限制,因为意图操作ACTION_SEND的工作方式。

至于你对Extra的问题,显然EXTRA_TEXT意图不起作用,因为它不用于图像或任何像这样的引用。

阅读文档

http://developer.android.com/reference/android/content/Intent.html#ACTION_SEND

它说:

  

启动SEND意图时,通常应将其包装在选择器中   (通过createChooser(Intent,CharSequence)),这将给出   适当的界面,供用户选择如何发送数据和允许   您可以指定一个提示,说明他们正在做什么。

     
    

输入:getType()是要发送的数据的MIME类型。获得额外的*     可以有EXTRA_TEXT或EXTRA_STREAM字段,包含     要发送的数据。如果使用EXTRA_TEXT,则MIME类型应为     “文本/纯”;否则它应该是数据的MIME类型     EXTRA_STREAM。如果MIME类型未知,请使用 / (仅限此类型     允许可以处理通用数据流的发件人。如果使用     EXTRA_TEXT,您还可以选择为客户提供EXTRA_HTML_TEXT     使用HTML格式检索文本。

         

从JELLY_BEAN开始,可以通过发送的数据提供     setClipData(ClipData)。这允许你使用     共享内容时的FLAG_GRANT_READ_URI_PERMISSION:URI和其他     ClipData的高级功能。如果使用这种方法,你仍然必须     通过EXTRA_TEXT或EXTRA_STREAM字段提供相同的数据     下面描述与旧应用程序的兼容性。如果你不这样做     设置一个ClipData,它会在调用时为你复制     startActivity(意向)。

         

可选标准附加内容,可能由某些收件人解释     适当的是:EXTRA_EMAIL,EXTRA_CC,EXTRA_BCC,EXTRA_SUBJECT。

  

根据这些信息,您还需要在意图类型中为特定数据设置mimetype。

答案 1 :(得分:2)

试试下面的代码。我用这段代码分享了Text&amp;来自我的一个应用程序的图像和它的工作对我来说很棒。

我希望它也适合你。

  File pngDir = new   File(Environment.getExternalStorageDirectory(),"Android/data/Textures");
   if (!pngDir.exists()) {
pngDir.mkdirs();
}
File pngfile = new File(pngDir,"texture1.png");
Uri pngUri = Uri.fromFile(pngfile);
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("image/png");
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
                "Text to Share");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT,
        "Context to share");
shareIntent.putExtra(android.content.Intent.EXTRA_STREAM,
                pngUri); //Share the image on Facebook
PackageManager pm = getApplicationContext().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);
        startActivity(shareIntent);
        break;
            }
        }

在此我已经使用了存储在设备中特定位置的图像。您可以根据图像位置进行更改。

答案 2 :(得分:0)

请参阅FaceBook页面了解更多详情

看起来我们无法传递文本在Facebook App中分享。

Facebook Share Intent Details