简体   繁体   中英

Facebook share dialog with fragment android

i built a simple app that allow the user to share link through facebook.

below my code:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.AlertDialog;
import android.content.ContentProviderOperation;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.provider.ContactsContract;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.facebook.UiLifecycleHelper;
import com.facebook.widget.FacebookDialog;

public class DownloadFragment extends Fragment {
    ImageView fbshare;
    private UiLifecycleHelper uiHelper;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.download, container, false);
          if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
            }
          uiHelper = new UiLifecycleHelper(getActivity(),null);
            uiHelper.onCreate(savedInstanceState);
          fbshare = (ImageView) rootView.findViewById(R.id.facebookimage);
          fbshare.setOnClickListener(new OnClickListener() {
           @Override
           public void onClick(View arg0) {
               FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(getActivity())
               .setLink("https://www.test.com")
               .build();
       uiHelper.trackPendingDialogCall(shareDialog.present());
         }
      });

            @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
            @Override
            public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
                Log.e("Activity", String.format("Error: %s", error.toString()));
            }

            @Override
            public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
                Log.i("Activity", "Success!");
            }
        });
    }

    @Override
    public void onResume() {
        super.onResume();
        uiHelper.onResume();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        uiHelper.onSaveInstanceState(outState);
    }

    @Override
    public void onPause() {
        super.onPause();
        uiHelper.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        uiHelper.onDestroy();
    }
}

the problem is when the user click the share button a share dialog appear without the link and disappear immediately, i tried the code in activity without fragment and it's worked fine.

also i did the manifest file in right way.

Below code is the facebook dialog code:

FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(getActivity())
.setLink("https://www.test.com").build();
uiHelper.trackPendingDialogCall(shareDialog.present());

In the latest SDK there is a simpler way

1) Add a Share Button

2) Create content

3) Assign it to the button

Code:

    Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.myimage);
    SharePhoto photo = new SharePhoto.Builder()
            .setBitmap(image)
            .build();
    SharePhotoContent sharePhotoContent = new SharePhotoContent.Builder()
            .addPhoto(photo)
            .build();

    ShareButton FBShare = (ShareButton) v.findViewById(R.id.fb_share);
    FBShare.setShareContent(sharePhotoContent);

XML:

                <com.facebook.share.widget.ShareButton
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:id="@+id/fb_share"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentEnd="true"
                    android:padding="4dp" />

Docs :

Sharing on Android

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM