[英]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.