Я хочу поделиться изображением, которое находится на SD-карте телефона, на Facebook.Facebook и Android sdk
Моя проблема после того, как я запустить приложение, я могу увидеть следующее сообщение
MyApplication хотел бы получить доступ к общедоступный профиль и список друзей.
Но когда я нажимаю ОК, и я иду на страницу своего Facebook, я не вижу никаких изображений.
Я следую инструкциям на this link и мой код ниже
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() && 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() && !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;
}
Эй, я попробую ур предложение, но он все еще не работает, вы можете посмотреть мой код и помочь мне – Nik