【问题标题】:Facebook ShareDialog: back button doesn't catch by ActivityFacebook ShareDialog:后退按钮不会被 Activity 捕获
【发布时间】:2014-03-13 10:22:37
【问题描述】:

我按照教程编写 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());

}

}

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

【问题讨论】:

    标签: android facebook dialog facebook-android-sdk


    【解决方案1】:

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

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

    【讨论】:

    • 好的,但是我怎样才能避免这种行为呢?当我调用 backpressed 时,我会关闭整个 FacebookDialog
    【解决方案2】:

    这将处理结果而无需后按。 我已经尝试过了,并取得了成功。

    点击时(链接示例(您可以修改您的内容)):

     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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多