8

我想通过 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 中传递字符串或图像。

4

3 回答 3

6

您不应该只直接针对 Facebook。

相反,您应该只使用共享意图。将您的数据传递到 SDK 中指定的附加组件中,然后让用户选择他们想要共享的对象。不要强迫他们使用 facebook,因为他们不是唯一的社交媒体。还有 twitter、4square 和许多其他用户使用的。让这些应用程序处理您的意图,不要规定如此严格的限制,因为这不是意图操作ACTION_SEND的工作方式。

至于您对 Extra 的问题,显然EXTRA_TEXT意图不起作用,因为它不用于图像或任何类似的参考。

阅读文档

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

它说:

启动 SEND Intent 时,您通常应该将其包装在选择器中(通过 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) 提供正在发送的数据。这允许您在共享内容时使用 FLAG_GRANT_READ_URI_PERMISSION:URI 和 ClipData 的其他高级功能。如果使用这种方法,您仍然必须通过下面描述的 EXTRA_TEXT 或 EXTRA_STREAM 字段提供相同的数据,以与旧应用程序兼容。如果您没有设置 ClipData,它将在调用 startActivity(Intent) 时为您复制到那里。

一些收件人可能会酌情解释的可选标准附加内容是:EXTRA_EMAIL、EXTRA_CC、EXTRA_BCC、EXTRA_SUBJECT。

鉴于此信息,您还需要为您的意图类型中的特定数据设置 mimetype。

于 2013-02-22T13:18:38.613 回答
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;
            }
        }

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

于 2013-03-06T04:37:05.680 回答
0

详情请参阅 Facebook 专页

看起来我们无法在 Facebook 应用程序中传递要分享的文本。

Facebook 分享意向详情

于 2013-06-05T12:29:56.410 回答