Note that there are some explanatory texts on larger screens.

plurals
  1. POFacebook and Android sdk
    text
    copied!<p>I want to share an image, which is on the phone's SD card, on Facebook. </p> <p>My problem is after I run the application I can see the following message </p> <blockquote> <p>Myapplication would like to access your public profile and friend list.</p> </blockquote> <p>But when I press OK and I go to my Facebook page I can not see any images there.</p> <p>I am following the instructions on <a href="https://developers.facebook.com/docs/android/getting-started/facebook-sdk-for-android/" rel="nofollow">this link</a> and my code is below</p> <pre><code>public class PhotoActivity extends BaseFragmentActivity { private static final String MIME_TYPE = "image/jpeg"; private Uri uri; private ImageView mPhotoView; private Session.StatusCallback mStatusCallback = new SessionStatusCallback(); private boolean mPostToWall = false; private ImageButton retakeBtn; private class SessionStatusCallback implements Session.StatusCallback { @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened() &amp;&amp; mPostToWall) { share(); } } } @Override public void onStart() { super.onStart(); Session.getActiveSession().addCallback(mStatusCallback); } @Override public void onStop() { super.onStop(); Session.getActiveSession().removeCallback(mStatusCallback); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Session session = Session.getActiveSession(); Session.saveSession(session, outState); } private void share() { Bundle bundle = new Bundle(); mPhotoView.setDrawingCacheEnabled(true); mPhotoView.buildDrawingCache(); Bitmap bmap = mPhotoView.getDrawingCache(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmap.compress(Bitmap.CompressFormat.JPEG, 80, stream); byte[] byteArray = stream.toByteArray(); bundle.putByteArray("picture", byteArray); WebDialog feedDialog = ( new WebDialog.FeedDialogBuilder(getApplicationContext(), Session.getActiveSession(), bundle)) .setOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(Bundle values, FacebookException error) { if (error == null) { // When the story is posted, echo the success // and the post Id. final String postId = values.getString("post_id"); if (postId != null) { Toast.makeText(getApplicationContext(), "Posted story, id: "+postId, Toast.LENGTH_SHORT).show(); } else { // User clicked the Cancel button Toast.makeText(getApplicationContext(), "Publish cancelled", Toast.LENGTH_SHORT).show(); } } else if (error instanceof FacebookOperationCanceledException) { // User clicked the "x" button Toast.makeText(getApplicationContext(), "Publish cancelled", Toast.LENGTH_SHORT).show(); } else { // Generic, ex: network error Toast.makeText(getApplicationContext(), "Error posting story", Toast.LENGTH_SHORT).show(); } } }) .build(); feedDialog.show(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(R.style.AppTheme); uri = getIntent().getData(); setContentView(R.layout.activity_photo); retakeBtn = (ImageButton) findViewById(R.id.retake_btn); String lang = getString(R.string.lang); if (lang.endsWith("FR")) { retakeBtn.setImageResource(R.drawable.retake_xhdpi); } else { retakeBtn.setImageResource(R.drawable.retake_en_xhdpi); } // Facebook Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); Session session = Session.getActiveSession(); if (session == null) { if (savedInstanceState != null) { session = Session.restoreSession(this, null, mStatusCallback, savedInstanceState); } if (session == null) { session = new Session(this); } Session.setActiveSession(session); if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { session.openForPublish(new Session.OpenRequest(PhotoActivity.this) .setCallback(mStatusCallback).setPermissions(Arrays.asList("photo_upload","publish_stream","publish_actions"))); } } mPhotoView = (ImageView) findViewById(R.id.photo); mPhotoView.setImageURI(uri); retakeBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(PhotoActivity.this, CameraActivity.class); startActivity(intent); finish(); } }); } @Override public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.item_photo_activity, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected( com.actionbarsherlock.view.MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Intent intent = new Intent(PhotoActivity.this, CameraActivity.class); intent.putExtra("from_activity", 300); startActivity(intent); finish(); break; case R.id.share_button: Session session = Session.getActiveSession(); if (!session.isOpened() &amp;&amp; !session.isClosed()) { session.openForPublish(new Session.OpenRequest(PhotoActivity.this) .setCallback(mStatusCallback).setPermissions(Arrays.asList("photo_upload","publish_stream","publish_actions"))); } else { Session.openActiveSession(PhotoActivity.this, true, mStatusCallback); } break; } return true; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload