Facebook Share对话框:后退按钮不会被“活动”捕获

时间:2014-03-13 10:22:37

标签: android facebook dialog facebook-android-sdk

我按照教程编写facebook api的ShareDialog,但它不起作用。启动活动后,在设置环境后,我会自动显示ShareDialog。如果我在显示该对话框时按下后退按钮,我的应用程序关闭对话框,然后再次打开它。似乎后退按钮没有被活动捕获。这是我的代码:

public class ShareScoreOnFb extends FragmentActivity {
private static UiLifecycleHelper uiHelper;
private static Activity activity;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_share_score_on_fb);
    activity = this;
    uiHelper = new UiLifecycleHelper(this, null);
    uiHelper.onCreate(savedInstanceState);

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data,
            new FacebookDialog.Callback() {

                @Override
                public void onComplete(PendingCall pendingCall, Bundle data) {
                    String gesture = FacebookDialog
                            .getNativeDialogCompletionGesture(data);
                    if (gesture != null) {
                        if ("post".equals(gesture)) {
                            Toast.makeText(ShareScoreOnFb.this,
                                    "success",
                                    Toast.LENGTH_SHORT).show();
                        }

                        ShareScoreOnFb.this.finish();
                    }
                    ShareScoreOnFb.this.finish();
                }

                @Override
                public void onError(PendingCall pendingCall,
                        Exception error, Bundle data) {

                    Toast.makeText(ShareScoreOnFb.this, error.toString(),
                            Toast.LENGTH_SHORT).show();
                    ShareScoreOnFb.this.finish();
                }

            });

}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

@Override
protected void onResume() {
    super.onResume();
    uiHelper.onResume();
    share();
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onBackPressed() {
    Log.i("TAG", "backpressed");
    super.onBackPressed();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

private void share() {
    Intent intent = this.getIntent();
    int myScore = intent.getIntExtra("MYSCORE", -1);
    int oppScore = intent.getIntExtra("OPPONENT_SCORE", -1);
    FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this)
            .setName("Score").setLink("http://www.google.it")
            .setDescription(myScore + " " + oppScore)
            .setPicture("http://www.cs.cmu.edu/~junggon/tools/gear.png")
            .build();

    uiHelper.trackPendingDialogCall(shareDialog.present());

}

}

我找不到任何解决方案,我会疯了!

2 个答案:

答案 0 :(得分:0)

当您调用本机共享对话框(在FacebookDialog中)时,它将在Facebook应用程序中启动另一个活动(称为活动Foo)。因此,如果您单击后退按钮,它会捕获后退按钮的Activity Foo,并完成Activity Foo。我相信这里是一系列事件:

  • 您的ShareScoreOnFb活动会调用shareDialog.present()
  • 活动Foo启动,并显示共享对话框
  • 您点击返回
  • 活动Foo完成,并调用您的回调(在onActivityResult中)
  • 一旦onActivityResult完成,您的ShareScoreOnFb活动的onResume就会被调用,它会再次尝试共享()

答案 1 :(得分:0)

这将处理结果而无需按下。 我试过这个并取得了成功。

单击(对于链接示例(您可以修改内容)):

 shareDialog = new ShareDialog(MainActivity.this);
 ShareLinkContent linkContent = new ShareLinkContent.Builder()
         .setContentTitle("Hello Facebook")
         .setContentDescription("The 'Hello Facebook' sample  showcases simple Facebook integration")    
                    .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
                            .build();
                    shareDialog.show(linkContent, ShareDialog.Mode.AUTOMATIC);

在onActivityResult方法中:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}