Android - Facebook SDK 4.0.0 - ShareDialog在图像共享时不显示

时间:2015-04-10 07:14:34

标签: android facebook

使用facebook SDK分享图片时遇到问题。       我创建了一个按钮,用于调用本机Facebook应用程序共享对话框。       但不幸的是,它没有出现。以及DDMS上的错误消息:

“无法找到com.facebook.app.FacebookContentProvider798741073537656的提供商信息”

请帮忙提一下。谢谢!

protected void onCreate(Bundle savedInstanceState) {
    FacebookSdk.sdkInitialize(getApplicationContext());
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn_share = (Button) findViewById(R.id.btn_share);
    shareDialog = new ShareDialog(MainActivity.this);

    btn_share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bitmap image = BitmapFactory.decodeFile(path);
            SharePhoto photo = new SharePhoto.Builder().setBitmap(image).build();
            SharePhotoContent content  = new SharePhotoContent.Builder().addPhoto(photo).build();
            shareDialog.show(content);
        }
    });
}

5 个答案:

答案 0 :(得分:1)

我有类似的问题,我缺少的是AndroidManifest.xml中的提供者标签。来自Facebook文档(https://developers.facebook.com/docs/sharing/android#photos):

您还需要在AndroidManifest.xml中设置ContentProvider,其中{APP_ID}是您的应用ID:

<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
      android:name="com.facebook.FacebookContentProvider"
      android:exported="true"/>

答案 1 :(得分:1)

我花了好几个小时试图找出问题所在。在我的例子中,provider标签位于AndroidManifest.xml中的application标签之外。确保您在应用程序中包含提供程序,而不是希望这有助于:)

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />

    <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        tools:replace="android:theme"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:label="@string/app_name" />

    <provider android:authorities="com.facebook.app.FacebookContentProvider1533172037423618"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />

</application>

答案 2 :(得分:0)

首先请确保您已在AndroidManifest.xml中提及内容提供程序

<provider android:authorities="com.facebook.app.FacebookContentProvider1234"
  android:name="com.facebook.FacebookContentProvider"
  android:exported="true"/>

1234是你的app id。

其次使用真实设备测试您的应用程序。并确保您已在设备中安装官方Facebook应用程序。

答案 3 :(得分:0)

对我来说,问题是<provider>必须位于AndroidManifest.xml sdk的<application>标签内

答案 4 :(得分:0)

我已经在Glide v4上测试了这个。+

Glide.with(this)
            .asBitmap()
            .load(YOUR_IMAGE_URL).into(new SimpleTarget<Bitmap>() {
        @Override
        public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {

            SharePhoto sharePhoto1 = new SharePhoto.Builder()
                    .setBitmap(resource)
                    .build();

            ShareContent shareContent = new ShareMediaContent.Builder()
                    .addMedium(sharePhoto1)
                    .build();

            new ShareDialog(getActivity()).show(shareContent, ShareDialog.Mode.AUTOMATIC);
        }
    });

除非您在Manifest.xml中添加此代码,否则上述代码将无效:

<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
      android:name="com.facebook.FacebookContentProvider"
      android:exported="true"/>

文档:https://developers.facebook.com/docs/sharing/android