Android Facebook 分享打开 shareDialog 两次
Android Facebook sharing is opening shareDialog twice
我正在使用 Facebook ShareDialog 分享 links 和照片,具体取决于内容。但我看到一个奇怪的问题。当我单击我的 shareActionProvider 中的 facebook 图标时,它首先打开 ShareDialog 并显示空白 post。然后,当我单击返回我的应用程序时,它会重新打开 ShareDialog,其中包含我想要显示的 link/ 照片内容。
这是我用来分享的代码。
....
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;
....
}
有没有人见过这种行为?
谢谢!!
我已经附上了我看到的两个屏幕,以便我看到它们。
编辑
我正在添加更多代码。
我正在使用自定义 ShareActionProvider
分享到 FB(完全从 Android 源代码复制,除了我覆盖 setOnShareTargetSelectedListener
)
在我的 Activity 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 ....
好的,我找到了解决方案。
由于我在调用 Facebook ShareDialog 之前设置了我的 shareIntent,它被调用了两次。
在我的习惯 ShareActionProvider
中,我覆盖了 ShareActivityChooserModelPolicy
class。它看起来像这样:
/**
* 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:这个 class 调用侦听器,但随后 returns false 不管怎样。从此方法返回 true 将使我们能够处理意图,而无需调用默认行为。
所以我所做的就是改变
mOnShareTargetSelectedListener.onShareTargetSelected(MyActionProvider.this, intent);
到
return mOnShareTargetSelectedListener.onShareTargetSelected(MyActionProvider.this, intent);
并在调用shareDialog.show(content)
后添加了return true
这解决了我的问题。
希望对大家有所帮助!
我正在使用 Facebook ShareDialog 分享 links 和照片,具体取决于内容。但我看到一个奇怪的问题。当我单击我的 shareActionProvider 中的 facebook 图标时,它首先打开 ShareDialog 并显示空白 post。然后,当我单击返回我的应用程序时,它会重新打开 ShareDialog,其中包含我想要显示的 link/ 照片内容。
这是我用来分享的代码。
....
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;
....
}
有没有人见过这种行为?
谢谢!!
我已经附上了我看到的两个屏幕,以便我看到它们。
编辑
我正在添加更多代码。
我正在使用自定义 ShareActionProvider
分享到 FB(完全从 Android 源代码复制,除了我覆盖 setOnShareTargetSelectedListener
)
在我的 Activity 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 ....
好的,我找到了解决方案。
由于我在调用 Facebook ShareDialog 之前设置了我的 shareIntent,它被调用了两次。
在我的习惯 ShareActionProvider
中,我覆盖了 ShareActivityChooserModelPolicy
class。它看起来像这样:
/**
* 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:这个 class 调用侦听器,但随后 returns false 不管怎样。从此方法返回 true 将使我们能够处理意图,而无需调用默认行为。
所以我所做的就是改变
mOnShareTargetSelectedListener.onShareTargetSelected(MyActionProvider.this, intent);
到
return mOnShareTargetSelectedListener.onShareTargetSelected(MyActionProvider.this, intent);
并在调用shareDialog.show(content)
return true
这解决了我的问题。
希望对大家有所帮助!