我想在 Facebook 上分享手机 SD 卡上的图像。
我的问题是运行应用程序后,我可以看到以下消息
Myapplication 想要访问您的公开个人资料和好友列表。
但是当我按 OK 并转到我的 Facebook 页面时,我在那里看不到任何图像。
我正在按照此链接上的说明进行操作,我的代码如下
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;
}