【问题标题】:Android: Share Image intent not working with Facebook?Android:共享图像意图不适用于 Facebook?
【发布时间】:2012-09-21 02:42:09
【问题描述】:

您好,我有以下代码可以分享图片:

// Share
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");

Uri uri = Uri.parse(getFilesDir() + File.separator + "myGoal.jpg");
        share.putExtra(Intent.EXTRA_STREAM, uri);

startActivity(Intent.createChooser(share, "Share Image"));

它可以将图像共享到 Dropbox,但如果我选择 Facebook 选项,我会看到 Facebook 的状态更新对话框,没有附加图像,如果我尝试使用“测试”更新我的状态,它就不起作用。没有错误。只是不工作。

我知道这不是图片,因为它可以正确上传到我的 Dropbox,我可以拉出图片并查看它。

我是否必须以不同的方式将图像附加到意图才能使其与 Facebook 一起使用?

有什么想法吗?我正在物理设备上调试。

【问题讨论】:

    标签: java android facebook android-intent


    【解决方案1】:

    所以我发现了问题。

    我正在使用 getFilesDir() 将图片保存到内部存储中,这会将图片放入我的应用程序沙箱中,并且其他应用程序无法访问。

    我用以下代码替换了我的代码:

    String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() + 
                    "/MyApp/";
    
    File dir = new File(file_path);
    dir.mkdirs();
    File file = new File(dir, "myPic.png");
    FileOutputStream fOut = new FileOutputStream(file);
    
    screenshot.compress(Bitmap.CompressFormat.PNG, 100, fOut);
    
    fOut.flush();
    fOut.close();
    
    // Share
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("image/png");
    
    share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
    share.putExtra(Intent.EXTRA_TEXT, "My Image");
    
    startActivity(Intent.createChooser(share, "Share Image"));
    

    现在工作得很好。

    【讨论】:

    • 您的EXTRA_TEXT 是否真的出现在您的Facebook 帖子中?据我所知,响应 Facebook ACTION_SEND Intent 的 Activity 永远不会消耗它。
    • 如果它对某人有所帮助,我认为真正使它起作用的是从 share.putExtra(Intent.EXTRA_STREAM, Uri.parse(filePath)); 更改为 share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(filePath))); 干杯!
    • 其实我觉得这可能是位置变化和额外传递方式的结合。至少我总是有外部路径,但只使用Uri.fromFile
    • 您的代码中的screenshot 是什么?如何初始化?
    • @hasnain_ahmad 如果我没记错的话,截图是一个位图对象。如果您按照代码进行操作,您会看到我创建了一个 File 对象,并将位图数据以 PNG 格式推送给它。然后同一个文件被用作 Intent 的一部分。
    【解决方案2】:

    我在 facebook 上发布图片所做的不是直接传递它,而是创建一个函数并像这样编写它:

     private void ShareWall(String message) {
            Bundle parameters = new Bundle();
                    // share msg
            parameters.putString("message", message);
                    // shre image which you have define above
            parameters.putString("picture", postImage);
    
            try {
                facebook.request("me");
                String response = facebook.request("me/feed", parameters, "POST");
                Log.d("response: ", response);
                if (response == null || response.equals("")) {
                    response.equals("");
                    showToast("No Response.");
    
                } else {
                    showToast("Message has been posted to your walll!.");
                }
                finish();
            } catch (Exception e) {
                showToast("Message failed to posdt on wall.");
                e.printStackTrace();
                finish();
            }
    
        }
    

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      即使您没有使用 Facebook SDK,您仍然可以将应用程序中的图像(但不是文本)共享到 Facebook。

      只要确保你使用 Uri.fromFile 而不是 Uri.parse 就可以了:

      请勿使用: intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(pathToFile));

      使用: intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(pathToFile)));

      【讨论】:

        【解决方案4】:

        这是一个不使用外部文件写入的解决方案:

        Drawable mDrawable = myImageView1.getDrawable();
        Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap();
        String path = MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "Image I want to share", null);
        Uri uri = Uri.parse(path);
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
        shareIntent.setType("image/*");
        startActivity(Intent.createChooser(shareIntent, "Share Image"));
        

        在这种情况下,我的图像来自 ImageView myImageView。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 2015-09-21
          • 2017-04-15
          相关资源
          最近更新 更多