【问题标题】:Android share image URL with Facebook SharePhotoContentAndroid 与 Facebook SharePhotoContent 共享图像 URL
【发布时间】:2015-04-03 02:33:22
【问题描述】:

我正在尝试使用 Facebook 新 SDK 中的新 SharePhoto 和 SharePhotoContent 类共享照片。 我想使用图片 URL 而不是本地存储的图片。

我能够使用本地存储的可绘制资源共享图像:

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.carrots);

SharePhoto photo = new SharePhoto.Builder()
                   .setImageBitmap(image)
                   .build();

SharePhotoContent content = new SharePhotoContent.Builder()
                                .addPhoto(photo)
                                .build();

shareDialog.show(content);

但是当我尝试使用图片 URL 时:

SharePhoto photo = new SharePhoto.Builder()
                       .setImageUrl(Uri.parse("http://s3-ak.buzzfed.com/static/images/public/verticals/food-title.png?v=201504021353"))
                       .build();

我看到的只是 Facebook shareDialog 中的一个空白帖子。

有没有其他人试过这个并让它工作?

非常感谢!

【问题讨论】:

  • 有趣的是,当我使用您的确切代码创建 SharePhoto 时,我看到了这个错误:i.imgur.com/O7TFGsM.jpg。你确定 Uri.parse 实际上是在给你一个非空的 Uri 吗?有时 Uri.parse() 方法会默默地失败,并且只给你一个空值。
  • @MingLi 我在测试过程中根本没有看到那个错误信息。而且我很肯定 Uri 是非空的。
  • 您在上面的帖子中使用的是那个确切的网址吗?如果是这样,那么您应该在 developers.facebook.com/bugs 提交一个错误,并使用一个小示例应用程序作为 zip 文件,然后我们可以看看发生了什么。
  • @MingLi 我正在使用那个确切的网址。我需要花一点时间来提交这个错误,因为我的工作期限很紧。因此,作为一种解决方法,我只是在将图像作为位图共享之前下载了图像。不过谢谢你的帮助!
  • 您的问题解决了吗?我有同样的问题

标签: android facebook facebook-sdk-4.0 android-sharing


【解决方案1】:

我所做的是下载图像并从服务器获取位图,然后发布到 FB:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    FacebookSdk.sdkInitialize(getApplicationContext());

    Button btn = (Button)findViewById(R.id.btn_share);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getImage();
        }
    });
}

private void getImage(){
    new DownloadImgTask().execute("http://url.com/1.jpg");
}

private void postFB(Bitmap bm){
    SharePhoto photo = new SharePhoto.Builder().setBitmap(bm).build();
    SharePhotoContent content = new SharePhotoContent.Builder().addPhoto(photo).build();
    ShareDialog dialog = new ShareDialog(this);
    if (dialog.canShow(SharePhotoContent.class)){
        dialog.show(content);
    }
    else{
        Log.d("Activity", "you cannot share photos :(");
    }

}

private class DownloadImgTask extends AsyncTask<String, Void, Bitmap>{

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap bm = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            bm = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return bm;
    }

    protected void onPostExecute(Bitmap result) {
        postFB(result);
    }
}

【讨论】:

  • 是的,我最终也是这样做的
【解决方案2】:

如果您使用链接而不是本地图像,则必须使用 ShareDialog 而不是 SharePhoto ,来自doc

ShareLinkContent linkContent = new ShareLinkContent.Builder()
        .setContentTitle("title")
        .setContentDescription("description")
        .setContentUrl(Uri.parse("your link"))
        .build();

【讨论】:

  • 所以我不能像使用位图那样只使用 url 来简单地显示照片吗?如果不是,那么 SharePhoto 模型中的 setImageUrl 函数有什么意义?
  • 你可以试试 SharePhoto.Builder() photo = new SharePhoto.Builder()
  • 您尝试的是“SharePhoto 照片”而不是“SharePhoto.Builder 照片”
  • 我认为这行不通。在 SharePhotoContent 构建器中,我必须添加一个 SharePhoto 对象,而不是 SharePhoto.Builder 对象。
  • 由于 setContentTitle、setContentDescription、setContentUrl 已被弃用,它将不再起作用。developers.facebook.com/docs/sharing/android
【解决方案3】:

如果你想分享图片的 URL,那么你应该使用 sharelinkcontent:这是我的代码,它可以工作,但没有标题或描述,只有 图片 url

    ShareLinkContent linkContent = new ShareLinkContent.Builder()
            .setContentTitle("Shared from nearbyme application")
            .setContentDescription("This is a wonderful place")
            .setContentUrl(Uri.parse("http://www.villathena.com/images/nearby/thumbs/le-bus-bleu-private-tours.jpg"))
            .setImageUrl(Uri.parse("http://www.villathena.com/images/nearby/thumbs/le-bus-bleu-private-tours.jpg"))
            .build();
      shareDialog.show(content);

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多