在没有Facebook sdk的情况下将图像从Android上传到Facebook

时间:2012-02-21 20:33:45

标签: android facebook bitmap

我正在编写一个应用程序,它与Facebook的整个连接用于上传位图。如果没有注册应用程序,下载sdk等,有没有办法做到这一点?

3 个答案:

答案 0 :(得分:0)

当然,假设用户已经安装了Facebook应用程序,您可以使用您的图像触发ACTION_SEND意图。然后用户选择Facebook并以这种方式上传。有点丑陋的imo ...为什么要避免使用sdk?当您在应用程序中考虑其他事情时,集成并不太难以为您提供更大的灵活性。

答案 1 :(得分:0)

喜欢' broody'说,这将是俗气的。这是个人应用程序还是分发?

如果您决定使用SDK等,请查看此帖子:Android - Upload photo to Facebook with Facebook Android SDK

答案 2 :(得分:0)

老兄试试这个

import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.text.util.Linkify;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class UploadPhotoResultDialog extends Dialog {

private String response, photo_id;
private TextView mOutput, mUsefulTip;
private Button mViewPhotoButton, mTagPhotoButton;
private ImageView mUploadedPhoto;
private Activity activity;
private ProgressDialog dialog;
private boolean hidePhoto = false;
private Handler mHandler;

public UploadPhotoResultDialog(Activity activity, String title, String response) {
    super(activity);
    this.activity = activity;
    this.response = response;
    setTitle(title);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mHandler = new Handler();

    setContentView(R.layout.upload_photo_response);
    LayoutParams params = getWindow().getAttributes();
    params.width = LayoutParams.FILL_PARENT;
    params.height = LayoutParams.FILL_PARENT;
    getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);

    mOutput = (TextView) findViewById(R.id.apiOutput);
    mUsefulTip = (TextView) findViewById(R.id.usefulTip);
    mViewPhotoButton = (Button) findViewById(R.id.view_photo_button);
    mTagPhotoButton = (Button) findViewById(R.id.tag_photo_button);
    mUploadedPhoto = (ImageView) findViewById(R.id.uploadedPhoto);

    JSONObject json;
    try {
        json = Util.parseJson(response);
        final String photo_id = json.getString("id");
        this.photo_id = photo_id;

        mOutput.setText(json.toString(2));
        mUsefulTip.setText(activity.getString(R.string.photo_tip));
        Linkify.addLinks(mUsefulTip, Linkify.WEB_URLS);

        mViewPhotoButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (hidePhoto) {
                    mViewPhotoButton.setText(R.string.view_photo);
                    hidePhoto = false;
                    mUploadedPhoto.setImageBitmap(null);
                } else {
                    hidePhoto = true;
                    mViewPhotoButton.setText(R.string.hide_photo);
                    /*
                     * Source tag: view_photo_tag
                     */
                    Bundle params = new Bundle();
                    params.putString("fields", "picture");
                    dialog = ProgressDialog.show(activity, "",
                            activity.getString(R.string.please_wait), true, true);
                    dialog.show();
                    Utility.mAsyncRunner.request(photo_id, params,
                            new ViewPhotoRequestListener());
                }
            }
        });
        mTagPhotoButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                 * Source tag: tag_photo_tag
                 */
                setTag();
            }
        });
    } catch (JSONException e) {
        setText(activity.getString(R.string.exception) + e.getMessage());
    } catch (FacebookError e) {
        setText(activity.getString(R.string.facebook_error) + e.getMessage());
    }
}

public void setTag() {
    String relativePath = photo_id + "/tags/" + Utility.userUID;
    Bundle params = new Bundle();
    params.putString("x", "5");
    params.putString("y", "5");
    Utility.mAsyncRunner.request(relativePath, params, "POST", new TagPhotoRequestListener(),
            null);
}

public class ViewPhotoRequestListener extends BaseRequestListener {

    @Override
    public void onComplete(final String response, final Object state) {
        try {
            JSONObject json = Util.parseJson(response);
            final String pictureURL = json.getString("picture");
            if (TextUtils.isEmpty(pictureURL)) {
                setText("Error getting \'picture\' field of the photo");
            } else {
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        new FetchImage().execute(pictureURL);
                    }
                });
            }
        } catch (JSONException e) {
            dialog.dismiss();
            setText(activity.getString(R.string.exception) + e.getMessage());
        } catch (FacebookError e) {
            dialog.dismiss();
            setText(activity.getString(R.string.facebook_error) + e.getMessage());
        }
    }

    public void onFacebookError(FacebookError error) {
        dialog.dismiss();
        setText(activity.getString(R.string.facebook_error) + error.getMessage());
    }
}

public class TagPhotoRequestListener extends BaseRequestListener {

    @Override
    public void onComplete(final String response, final Object state) {
        if (response.equals("true")) {
            String message = "User tagged in photo at (5, 5)" + "\n";
            message += "Api Response: " + response;
            setText(message);
        } else {
            setText("User could not be tagged.");
        }
    }

    public void onFacebookError(FacebookError error) {
        setText(activity.getString(R.string.facebook_error) + error.getMessage());
    }
}

public void setText(final String txt) {
    mHandler.post(new Runnable() {
        @Override
        public void run() {
            mOutput.setText(txt);
        }
    });
}

private class FetchImage extends AsyncTask<String, Void, Bitmap> {
    @Override
    protected Bitmap doInBackground(String... urls) {
        return Utility.getBitmap(urls[0]);
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        dialog.dismiss();
        mUploadedPhoto.setImageBitmap(result);
    }
}}