我在尝试使用适用于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>
如果我的代码不正确,请提供一个很好的例子。 : - )
答案 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 可以解析此媒体。