Facebook SDK照片从Android应用程序共享到墙上 - 对话框没有显示

时间:2015-05-28 06:34:42

标签: android facebook facebook-graph-api

我认为我的代码是正确的(大多数情况下),因为我尽可能地遵循Facebook SDK guide。但是,当我在ActionBar中单击微调器时,我看不到Facebook SDK中的共享对话框。什么都没发生,没有错误,什么也没有。

我的Manifest中有所需的一切(提供商和Facebook活动,我的特殊号码,也是互联网权限)。另外我读到你不再需要使用较新的SDK的墙访问权限,所以我没有在我的代码中包含它(指南也没有提到它)。我肯定必须使用Facebook SDK,而不是图像共享到Facebook黑客,因为它对我的简历很重要。我只是想在Facebook上分享一张位图照片到我的墙上。 Stack上的每个类似问题都没有帮助。

有没有使用当前Facebook SDK经验的人在我的代码中看到了什么问题?感谢。

package org.azure_simbiosys.cutecollection.phototab;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.facebook.CallbackManager;
import com.facebook.FacebookSdk;
import com.facebook.share.model.SharePhoto;
import com.facebook.share.model.SharePhotoContent;
import com.facebook.share.widget.ShareDialog;

import org.azure_simbiosys.R;

public class PhotoViewerActivity extends ActionBarActivity {

    Spinner shareSpinner;
    String[] shareList = {"Share", "Facebook", "Twitter", "SMS"};
    Bitmap bm;
    CallbackManager callbackManager;
    ShareDialog shareDialog;

    Integer[] iconList = {R.drawable.ic_action_social_share, R.drawable.ic_facebook,
            R.drawable.ic_twitter, R.drawable.ic_sms};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_photo_viewer);

        // Shows the up carat near app icon in ActionBar
        getSupportActionBar().setDisplayUseLogoEnabled(false);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        ImageView photoView = (ImageView)findViewById(R.id.photo_display);

        // gets the single bitmap image from the array of bytes
        Bundle extras = getIntent().getExtras();
        byte[] byteArray = extras.getByteArray("photo");
        bm = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

        // sets device orientation based on the image orientation
        if (bm.getWidth() > bm.getHeight()){
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        } else
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        // sets bitmap into your ImageView
        photoView.setImageBitmap(bm);

        // set up Facebook photo sharing
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        shareDialog = new ShareDialog(PhotoViewerActivity.this);

    }

    static class ViewHolder {
        TextView iconTitle;
        ImageView iconImage;
    }


    public class SpinnerAdapter extends ArrayAdapter<String> {
        int groupId;
        String[] textData;
        Activity context;
        LayoutInflater inflater;

        public SpinnerAdapter(Activity context, int vg, int id, String[] textData) {
            super(context, id, textData);
            this.context = context;
            groupId = vg;
            this.textData = textData;
            inflater = (LayoutInflater) context.getSystemService
                    (Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            return getView(position, convertView, parent);
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            View itemView = convertView;
            ViewHolder viewHolder;

            if(convertView == null) {
                itemView = inflater.inflate(groupId, parent, false);

                viewHolder = new ViewHolder();

                viewHolder.iconImage = (ImageView) itemView.findViewById(R.id.spinnerImage);

                viewHolder.iconTitle = (TextView) itemView.findViewById(R.id.textview);

                itemView.setTag(viewHolder);

            } else {
                viewHolder = (ViewHolder) itemView.getTag();
            }

            viewHolder.iconImage.setImageResource(iconList[position]);
            viewHolder.iconTitle.setText(textData[position]);

            return itemView;
        }
    }

    // callback for facebook sharing
    @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_share, menu);

        shareSpinner = (Spinner) menu.findItem(R.id.action_social_share).getActionView();
        SpinnerAdapter adapter = new SpinnerAdapter(this, R.layout.share_spinner_row,
                                                                R.id.textview, shareList);
        shareSpinner.setAdapter(adapter);

        // when share icon is clicked, set listener for the rows in the spinner
        shareSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                switch (position) {
                    case 1: // Facebook
                        Bitmap image = bm;
                        ShareDialog shareDialog = new ShareDialog(PhotoViewerActivity.this);
                        SharePhoto photo = new SharePhoto.Builder()
                                .setBitmap(image)
                                .build();
                        SharePhotoContent content = new SharePhotoContent.Builder()
                                .addPhoto(photo)
                                .build();

                        shareDialog.show(content, ShareDialog.Mode.AUTOMATIC);

                        break;
                    case 2: // Twitter
                        Toast.makeText(parent.getContext(), "Twitter!", Toast.LENGTH_SHORT).show();
                        break;
                    case 3: // SMS
                        Toast.makeText(parent.getContext(), "SMS!", Toast.LENGTH_SHORT).show();
                        break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

               // don't need anything here for purposes of this app
            }
        });

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Makes the UP caret go back to the previous fragment MakeCuteHome
        switch (item.getItemId()) {
            case android.R.id.home:
                android.app.FragmentManager fm = getFragmentManager();
                fm.popBackStack();
                finish();
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

0 个答案:

没有答案