安卓果冻豆版本如何通过Facebook共享意图

8
我想通过 Android Jelly Bean 向 Facebook 分享一些图片和文字,除了 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中传递字符串或图像。


2
“is not working” 是一个完全无用的症状描述。此外,对JoxTraex的答案加1 —— 请允许用户在他们想要的地方分享他们的内容。 - CommonsWare
这是我的解决方案,仅适用于共享URL,https://dev59.com/xmsz5IYBdhLWcg3w9ssQ#29529335 - Hesam
3个回答

6

您不应该只直接针对Facebook进行目标设置。

相反,您应该使用分享意图。按照SDK中指定的方式将数据作为额外内容传递,然后让用户选择他们想要分享的内容。不要强制他们使用Facebook,因为他们不是唯一的社交媒体。还有Twitter、4square和其他用户使用的应用程序。让这些应用程序处理您的意图,不要规定如此严格的限制,因为这不是意图操作ACTION_SEND的工作方式。

至于您在Extra方面遇到的问题,显然EXTRA_TEXT意图不起作用,因为它不用于图像或任何引用之类的东西。

阅读文档

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

它说:

启动SEND意图时,通常应该将其包装在一个chooser中(通过createChooser(Intent,CharSequence)),这将为用户提供适当的界面以选择如何发送数据,并允许您指定提示以指示他们正在做什么。
getType()是发送的数据的MIME类型。get*Extra可以有EXTRA_TEXT或EXTRA_STREAM字段,包含要发送的数据。如果使用EXTRA_TEXT,则MIME类型应为"text/plain";否则,它应该是EXTRA_STREAM中数据的MIME类型。如果MIME类型未知,请使用“/”(这只允许处理通用数据流的发送方)。如果使用EXTRA_TEXT,则还可以选择提供EXTRA_HTML_TEXT以使客户端检索具有HTML格式的文本。
自JELLY_BEAN起,可通过setClipData(ClipData)提供要发送的数据。这允许您在共享内容:URI和ClipData的其他高级功能中使用FLAG_GRANT_READ_URI_PERMISSION。如果使用此方法,则仍必须通过下面描述的EXTRA_TEXT或EXTRA_STREAM字段提供相同的数据,以便与旧应用程序兼容。如果不设置ClipData,则在调用startActivity(Intent)时会将其复制到那里。
一些接收者可能会解释为适当的可选标准额外项是:EXTRA_EMAIL、EXTRA_CC、EXTRA_BCC、EXTRA_SUBJECT。
鉴于这些信息,您还需要在意图的类型中设置特定数据的 mimetype。

@AndroidEnthusiastic 一定要在这里阅读有关这种方法的信息 here - Phil
我有像Facebook、Twitter和LinkedIn这样的按钮。如果我点击Facebook,我想分享自己的内容。但JoxTraex规定用户必须选择。 - AndroidEnthusiastic
那么你所要求的不是共享意图,而是特定的API。理想情况下,共享应该让用户选择,这样更加灵活多变。 - JoxTraex

2

尝试下面的代码。我使用这个代码从我的应用程序共享文本和图片,对我来说效果非常好。

希望它也对你有用。

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

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


0
请参考 FaceBook 页面获取更多详细信息。
看起来我们无法在 Facebook 应用程序中传递要分享的文本。 FaceBook 分享意图详情

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接