From the facebook sdk 3.0 documents you can not give the read and publish permission simultaniously. But once you open the session with read permission later you can update this session to publish permission, by UiLifecycleHelper class. Once the session state changes to SessionState.OPENED_TOKEN_UPDATED means session updated with publish permission. Here is sample code for you hope this help you.
public class Example {
private static final int REAUTH_ACTIVITY_CODE = 100;
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions", "publish_stream");
private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_submit_post);
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
publishStory();
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (exception != null) {
new AlertDialog.Builder(SubmitPost.this)
.setMessage(exception.getMessage())
.setPositiveButton("OK", null).show();
} else {
SubmitPost.this.onSessionStateChange(session, state, exception);
}
}
};
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
if (pendingAnnounce && state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
// Session updated with new permissions so try publishing once more.
pendingAnnounce = false;
//call your method here to publish something on facebook
publishStory();
}
}
}
private void requestPublishPermissions(Session session) {
if (session != null) {
pendingAnnounce = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS);
newPermissionsRequest.setRequestCode(REAUTH_ACTIVITY_CODE);
Session mSession = Session.openActiveSessionFromCache(this);
mSession.addCallback(callback);
mSession.requestNewPublishPermissions(newPermissionsRequest);
}
}
private void publishStory() {
// Check for publish permissions
List<String> permissions = this.session.getPermissions();
if (!permissions.containsAll(Arrays.asList(PERMISSIONS ))) {
this.requestPublishPermissions(this.session);
this.is_return = true;
return;
}
Session session = Session.getActiveSession();
if (session != null) {
CreateFBPost();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REAUTH_ACTIVITY_CODE:
Session session = Session.getActiveSession();
if (session != null) {
session.onActivityResult(this, requestCode, resultCode, data);
}
break;
}
}