【问题标题】:FacebookException : Failed to copy imageFacebookException:无法复制图像
【发布时间】:2016-02-18 05:13:33
【问题描述】:

我在尝试使用 Android 版 Facebook SDK 时遇到此错误。

这是我的执行调用:

new getBitmapFromUrl().execute("https://fs02.androidpit.info/userfiles/4110382/image/Android/android-6-0-marshmallow-hero-w782.jpg");

我的异步代码:

public class getBitmapFromUrl extends AsyncTask<String,String,Bitmap>{
    @Override
    protected Bitmap doInBackground(String... params) {
        Bitmap bitmap = null;
        URL url = null;
        try {
            url = new URL(params[0]);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoInput(true);
            InputStream inputStream = con.getInputStream();
            bitmap = BitmapFactory.decodeStream(inputStream);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);

        SharePhoto sharePhoto = new SharePhoto.Builder()
                .setBitmap(bitmap)
                .build();
        SharePhotoContent sharePhotoContent = new SharePhotoContent.Builder()
                .addPhoto(sharePhoto)
                .build();
 //shareButton is the facebookSdk default share button to call shareDialog
        shareButton.setShareContent(sharePhotoContent);
    }
}

这是我的回调方法:

shareButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
    @Override
    public void onSuccess(Sharer.Result result) {
        Log.e("Status", result.toString());
    }

    @Override
    public void onCancel() {

    }

    @Override
    public void onError(FacebookException error) {
        Log.e("Status", error.toString());
    }
});

还有我的 onActivity 回调:

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

我的清单代码:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    <provider
        android:authorities="com.facebook.app.FacebookContentProvider1507510099556071"
        android:name="com.facebook.FacebookContentProvider"/>
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.facebook.FacebookActivity"/>
</application>

如果我的代码不正确,请提出一个好的示例。 :-)

【问题讨论】:

  • 您真正想要什么?您想将图片分享到 Facebook 吗?
  • 是的!我正在学习 facebook sdk 文档。所以我尝试了 sharePhotoContent 方法,但它显示我无法复制错误!
  • 请张贴您的清单 sn-p pls
  • @RaguSwaminathan 看到我帖子的编辑,谢谢
  • 你有 Facebook 分享按钮吗?还是原生按钮?

标签: android facebook sdk mobile-application facebook-exception


【解决方案1】:

只需将导出的属性更改为 true 即可使用

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

【讨论】:

  • 是的。确定你设置了 android:exported="true"
【解决方案2】:

您的代码很好。但需要一些小的调整。

希望您没有添加正确的共享位图。检查下面 代码中的内容。

在 Post 执行中,您添加了“mBitmap”。您需要添加“位图” 您从参数中收到。

请在您的 onCreate 上调用并启动 Facebook SDK 和共享对话框。检查以下示例。

// 声明

CallbackManager callbackManager;
ShareDialog shareDialog;

// 下面应该在oncreate下。

    FacebookSdk.sdkInitialize(this);
    callbackManager = CallbackManager.Factory.create();
    shareDialog = new ShareDialog(this);
    shareButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
// Initiate share by downloading the image.
        new getBitmapFromUrl().execute("https://fs02.androidpit.info/userfiles/4110382/image/Android/android-6-0-marshmallow-hero-w782.jpg");
      }
    });

// 从路径下载文件并返回位图。

public class getBitmapFromUrl extends AsyncTask<String, String, Bitmap> {
@Override
protected Bitmap doInBackground(String... params) {
  Bitmap bitmap = null;
  URL url = null;
  try {
    url = new URL(params[0]);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setDoInput(true);
    InputStream inputStream = con.getInputStream();
    bitmap = BitmapFactory.decodeStream(inputStream);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return bitmap;
}
    @Override
    protected void onPostExecute(Bitmap bitmap) {
      super.onPostExecute(bitmap);

      SharePhoto sharePhoto = new SharePhoto.Builder()
              .setBitmap(bitmap)
              .build();
      SharePhotoContent sharePhotoContent = new SharePhotoContent.Builder()
              .addPhoto(sharePhoto)
              .build();
//      shareButton.setShareContent(sharePhotoContent);
      shareDialog.show(sharePhotoContent);
    }
  }

查询让我知道!

【讨论】:

  • 我已经完成了上述所有操作!!但是我使用 sdk 分享了视频并链接到 facebook,并且启用了沙箱。所以请把 setBitmap(bitmap) 中的位图代码发送给我。我想位图转换是我的问题
  • 我找不到更改。它看起来与我在问题上发布的代码相同。你能帮帮我吗。
  • 您正在使用 facebook 默认分享按钮。但我正在使用 android 本机按钮。这是唯一的区别。尝试使用本机 android 按钮跟进我的代码进行分享。
【解决方案3】:

以上都是你必须做的。

那么最重要的是你必须将文件路径设置为:"content://media/external/images/media/159745" 以让 com.facebook.FacebookContentProvider 可以解析此媒体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2018-02-08
    相关资源
    最近更新 更多