FacebookException:无法复制图像

时间:2016-02-18 05:13:33

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

我在尝试使用适用于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>

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

  

希望您没有添加正确的位图以进行共享。检查下面   你代码中的东西。

     

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

在onCreate上打电话并启动Facebook SDK并分享对话框。检查以下样本。

//宣言

    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");
      }
    });

//下面应该在oncreate下。

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);
    }
  }

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

{{1}}

查询让我知道。!

答案 2 :(得分:0)

您上面要做的所有事情。

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