Android Facebook分享两次开放shareDialog

时间:2015-04-03 23:13:20

标签: android facebook share facebook-sdk-4.0 facebook-share

我使用Facebook ShareDialog分享链接和照片,具体取决于内容。但我看到一个奇怪的问题。当我点击shareActionProvider中的facebook图标时,它首先打开ShareDialog,其中包含空白帖子。然后,当我点击返回我的应用程序时,它会重新打开ShareDialog,其中包含我想要显示的链接/照片内容。

以下是我用来分享的代码。

....

shareActionProvider.setOnShareTargetSelectedListener(new MyActionProvider.OnShareTargetSelectedListener() {
       @Override
       public boolean onShareTargetSelected(MyActionProvider source, Intent intent) {
           // Recover selected application name for custom action handling
          final String appName = intent.getComponent().getPackageName();

          switch (appName) {
              case "com.facebook.katana":                 // Facebook

                        ShareLinkContent content = new ShareLinkContent.Builder()
                                .setContentUrl(Uri.parse("https://developers.facebook.com"))
                                .setContentTitle("Check it out!")
                                .build();

                        shareDialog.show(content);

                        break;

               ....
          }

之前有没有人见过这种行为?

谢谢!

我已经附上了我所看到的两个屏幕,以便我看到它们。

First screen

Second dialog screen

编辑

我添加了更多代码。

我使用自定义ShareActionProvider分享给FB(完全从Android源代码中复制,除了我覆盖setOnShareTargetSelectedListener

在我的活动onCreate中:

FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
shareDialog = new ShareDialog(this);
shareDialog.registerCallback(
            callbackManager,
            shareCallback);

当我设置ShareActionProvider时:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");

if (shareActionProvider != null) {
    shareActionProvider.setShareIntent(shareIntent);
    //... this is before the setOnShareTargetSelected call ....

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。

由于我在调用Facebook ShareDialog之前设置了我的shareIntent,因此它被调用了两次。

在我的自定义ShareActionProvider中,我覆盖了ShareActivityChooserModelPolicy类。它看起来像这样:

/**
 * Policy that delegates to the {@link OnShareTargetSelectedListener}, if such.
 */
private class ShareActivityChooserModelPolicy
        implements MyActivityChooserModel.OnChooseActivityListener {
    @Override
    public boolean onChooseActivity(MyActivityChooserModel host, Intent intent) {
        if (mOnShareTargetSelectedListener != null) {
            mOnShareTargetSelectedListener.onShareTargetSelected(MyActionProvider.this, intent);
        }
        return false;
    }
}

来自this post:此类调用侦听器,但无论如何都返回false。从此方法返回true将允许我们处理意图,而不调用默认行为。

所以我所做的就是改变

mOnShareTargetSelectedListener.onShareTargetSelected(MyActionProvider.this, intent);

return mOnShareTargetSelectedListener.onShareTargetSelected(MyActionProvider.this, intent);

在致电return true

后添加了shareDialog.show(content)

这解决了我的问题。

希望它能帮助别人!