1

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

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

4

3 回答 3

2

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

<provider android:authorities="com.facebook.app.NativeAppCallContentProvider355198514515820"
              android:name="com.facebook.NativeAppCallContentProvider"
              android:exported="true"/>
于 2020-09-24T19:09:10.017 回答
0

以上都是你必须做的。

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

于 2019-12-14T06:58:07.413 回答
0

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

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

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

查询让我知道。!

于 2016-02-18T07:47:47.353 回答