如何使用图形api将SD卡图像发布到Facebook墙上

时间:2012-12-06 12:31:02

标签: android

  

可能重复:
  How to post image to facebook wall using graph api

我正在使用Graph API在Facebook墙上发布。

strpostimageurl=/mnt/sdcard/DCIM/mnt/sdcard/DCIM/Camera1354795516555.jpg

String res = UrltoValue.getValuefromUrl("https://graph.facebook.com/"+Login.facebookid+"/feed?access_token="+accesstoken+"&method="+"post"+"&message="+"hi"+"&link="+strpostimageurl);

我收到错误请求作为回复。

是否可以为发布图像提供SD卡路径?我只有对象的Bitmap,所以我用该Bitmap创建了文件,我正在使用它。

我需要在多个朋友的墙上发帖,所以我更喜欢使用Graph API。

1 个答案:

答案 0 :(得分:0)

您收到错误请求错误,因为您将错误的值传递给Facebook API。

首先,如果您是通过链接或网址上传图片/照片,那么您必须使用“source”标记并 您在代码中使用“link”标记。

其次,如果您要解决上述问题,我怀疑代码是否可行,因为您的strpostimageurl实际上没有有效的网址。

第三,由于它不是有效的URL,因此使用"source"标签不是一种选择。你需要使用这样的东西:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmpImageGallery.compress(CompressFormat.JPEG, 100, baos);

Bundle postImgGallery = new Bundle();

// ADD THE PHOTO DATA TO THE BUNDLE
postImgGallery.putByteArray("photo", baos.toByteArray());

// ADD THE CAPTION FROM THE STRING finalStatusMessage TO THE BUNDLE
if (finalStatusMessage.equals(""))  {
    /*****  DO NOTHING HERE     *****/
} else {
    postImgGallery.putString("caption", finalStatusMessage);
}

mAsyncRunner.request("me/photos", postImgGallery, "POST", new PhotoUploadListener(), null);

下面,

  1. mAsyncRunner是Facebook SDK中AsyncFacebookRunner Class的一个实例。
  2. bmpImageGalleryBitmap的实例,其中存储了用户选择的图像。它使用以下方式从库中获取用户选择的图像:
  3. 此代码在OnClick的{​​{1}}事件上运行,该事件会打开图库并让用户从中选择照片/图像:

    Button

    然后,使用Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, reqcdGalleryImage); 方法,将所选图像传递给之前代码中使用的onActivityResult()实例Bitmap

    bmpImageGallery

    修改

    然后尝试这个(OnClick):

    bmpImageGallery = MediaStore.Images.Media.getBitmap(this.getContentResolver(), targetURI);
    

    在此Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE"); File cameraFolder; if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(),"give_a_folder_name/camera"); else cameraFolder= StatusUpdate.this.getCacheDir(); if(!cameraFolder.exists()) cameraFolder.mkdirs(); File photo = new File(Environment.getExternalStorageDirectory(), "give_a_folder_name/camera/camera_snap.jpg"); getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); initialURI = Uri.fromFile(photo); startActivityForResult(getCameraImage, 2); 中:

    onActivityResult()

    targetURI和initialURI是全局声明的Uri实例