使用Facebook共享对话框而不将当前活动发送到后台

时间:2016-03-21 09:05:11

标签: android facebook

我正在开发使用谷歌游戏服务的实时多人游戏,我想在我的应用程序中实现Facebook共享。我已经进行了照片共享工作,但谷歌游戏服务的工作方式是,如果游戏的活动进入后台,则玩家离开房间,因此游戏将断开连接。有没有办法使用Facebook在其SDK中提供的ShareDialog而不将当前活动放在后台?我可以强制它半透明覆盖吗?

我试图强迫FacebookActivity使用Theme.Dialog样式,但这没有效果。

如果唯一的选择是创建我自己的自定义共享对话框,请提供一个如何实现它并将我的SharePhotoContent传递给它的示例。

<activity android:name="com.facebook.FacebookActivity"
        android:configChanges=
            "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:theme="@android:style/Theme.Dialog"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="transparent.text.FacebookActivity"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

1 个答案:

答案 0 :(得分:1)

您需要将facebook sdk集成到您的应用程序中。

首先,在onCreate方法中创建一个ShareDialog实例。

CallbackManager callbackManager;
ShareDialog shareDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    shareDialog = new ShareDialog(this);
    // this part is optional
    shareDialog.registerCallback(callbackManager, new FacebookCallback < Sharer.Result > () {...
    });
}

然后使用以下代码显示共享对话框。

if (ShareDialog.canShow(ShareLinkContent.class)) {
    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);
}

还处理onActivityResult中的回调。

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