发布照片facebook android

时间:2016-06-21 11:08:11

标签: android facebook share photo

我会在我的应用中创建一张带照片和标题的帖子并将其发布在我的脸书上。 我不确切知道所需的步骤,所以我不知道我做错了什么。 主要活动在其xml中有一个LoginButton和一个ShareButton。 我做了:

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public DBhelper database;
public CallbackManager callbackManager;
public ShareDialog shareDialog;
public ShareButton shareButton;
public SharePhotoContent sharePhotoContent;

}

这堂课有:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
    callbackManager = CallbackManager.Factory.create();
    shareDialog = new ShareDialog(this);
    shareButton=new ShareButton(this);

    setContentView(R.layout.activity_main);

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions("user_friends","public_profile");
    get_login_details(loginButton);

    shareButton=(ShareButton) findViewById(R.id.share_button);
    sharePhotoContent=genera_share_photo_content();
    shareButton.setShareContent(sharePhotoContent);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode,resultCode,data);
    Log.e(TAG,data.toString());

}

这两种方法:

protected void get_login_details(LoginButton loginButton) {
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
            Toast.makeText(getApplicationContext(),"SI",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCancel() {
            // App code
            Toast.makeText(getApplicationContext(),"CANCEL",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Toast.makeText(getApplicationContext(),"NO",Toast.LENGTH_LONG).show();
        }
    });

}

public SharePhotoContent genera_share_photo_content() {
    //code...
    Bitmap image = ...

    SharePhoto photo = new SharePhoto.Builder()
            .setBitmap(image)
            .build();
    SharePhotoContent content = new SharePhotoContent.Builder()
            .addPhoto(photo)
            .build();
    return content;

}

现在,共享内容在开始时制作:我会使用genera_share_photo_content()使其动态化: 我怎么能在我想要的时候修改它? 我应该在某个地方shareDialog.show(content)ShareApi.share(content,null)打电话吗? 是我为登录按钮设置的权限user_friendspublic_profile。应该做所有工作吗?

1 个答案:

答案 0 :(得分:1)

您必须添加以下权限:

"publish_actions"

并且在您的清单中,您必须包含这些标记

<meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />
    <provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.app.FacebookContentProvider1618161851808217"
        android:exported="true" />
    <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

这样做:

private void sharePhotoToFacebook(){

    String filePath = "path to your image";
    String text = "your custom text";
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
        SharePhoto photo = new SharePhoto.Builder()
                .setBitmap(bitmap)
                .setCaption(text)
                .build();

        SharePhotoContent content = new SharePhotoContent.Builder()
                .addPhoto(photo)
                .setContentUrl(Uri.parse(text))
                .build();
    ShareApi.share(content,null);
    Toast.makeText(getApplicationContext(),"Snapshot shared On Facebook",Toast.LENGTH_SHORT).show();

}

public void publishimage() {
    Log.i("Android","publishing Image");
    FacebookSdk.sdkInitialize(getApplicationContext());

    callbackManager = CallbackManager.Factory.create();

    shareDialog = new ShareDialog(this);
    java.util.List<String> permissionNeeds = Arrays.asList("publish_actions");

    //this loginManager helps you eliminate adding a LoginButton to your UI
    manager = LoginManager.getInstance();

    manager.logInWithPublishPermissions(this, permissionNeeds);

    manager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            sharePhotoToFacebook();
        }

        @Override
        public void onCancel() {
            System.out.println("onCancel");
        }

        @Override
        public void onError(FacebookException exception) {
            System.out.println("onError");
        }
    });

}

并点击按钮点击:

btnshare.setOnclicklistener(new View.OnclickListener){
    @Override
    public void onClick(View V){
        publishimage();
    }
}