I am trying to share Image and Content via Facebook,but what i am trying is if user is not logged in via Facebook,and user click on Share button then first it should ask for
You need to call below code on click of button from adapter.
List<String> permissionNeeds = Arrays.asList("publish_actions");
manager = LoginManager.getInstance();
manager.logInWithPublishPermissions(this, permissionNeeds);
manager.registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
publishImage();
}
@Override
public void onCancel() {
System.out.println("onCancel");
}
@Override
public void onError(FacebookException exception) {
System.out.println("onError");
}
});
}
private void publishImage() {
Bitmap image = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
//You need to get bitmap from any source.
SharePhoto photo = new SharePhoto.Builder().setBitmap(image)
.setCaption("Welcome To Facebook Photo Sharing on steroids!")
.build();
SharePhotoContent content = new SharePhotoContent.Builder().addPhoto(
photo).build();
ShareApi.share(content, null);
Toast.makeText(this, "Succsesfully posted on your wall",
Toast.LENGTH_LONG).show();
}
first add
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
permissionNeeds = Arrays.asList("publish_actions");
manager = LoginManager.getInstance();
**on onCreate and wirte below code in send button lick event**
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isOnline()) {
new WebView(MainActivity.this);
manager.logInWithPublishPermissions(MainActivity.this, permissionNeeds);
manager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
sharePhotoToFacebook();
}
@Override
public void onCancel() {
System.out.println("onCancel");
}
@Override
public void onError(FacebookException exception) {
exception.printStackTrace();
}
});
alertDialog.dismiss();
} else {
Toast.makeText(getBaseContext(), "Please check internet connection", Toast.LENGTH_SHORT).show();
}
}
});
private void sharePhotoToFacebook() {
try {
Log.i("Facebook Image", camera_pathname + "");
Bitmap image = BitmapFactory.decodeFile(camera_pathname);
//Bitmap image = decodeFile(camera_pathname);
image = getResizedBitmap(image);
//Bitmap image = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
SharePhoto photo = new SharePhoto.Builder()
.setBitmap(image)
.setCaption(et_hashtag.getText().toString())
.build();
SharePhotoContent content = new SharePhotoContent.Builder()
.addPhoto(photo)
.build();
ShareApi.share(content, null);
Toast.makeText(getBaseContext(), "Shared successfully", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
// manager.logOut();
}
First time when you try to log in, access token is null. So, it is going on else part. Do this in else part, I think so it may work for you :
LoginManager.getInstance().registerCallback(mcallbackManager, new FacebookCallback<LoginResult>()
{
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) {
}
});
}
});