簡體   English   中英

FacebookException:無法復制圖像

[英]FacebookException : Failed to copy image

嘗試使用適用於 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>

如果我的代碼不正確,請提出一個很好的例子。 :-)

只需將導出的屬性更改為 true 即可

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

你的代碼沒問題。 但需要一些小的調整。

希望您沒有添加正確的位圖進行共享。 檢查代碼中的以下內容。

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

查詢讓我知道。!

以上都是你必須做的。

那么最重要的是,您必須將文件路徑設置為: "content://media/external/images/media/159745"以便com.facebook.FacebookContentProvider可以解析此媒體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM