张贴照片facebook android

问题描述:

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

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; 

}

现在,共享内容在开始时maked:我想使它成为动态使用genera_share_photo_content(): 我怎样才能修改它,当我想要什么? 我应该打电话shareDialog.show(content)还是ShareApi.share(content,null)? 权限user_friendspublic_profile,我设置为登录按钮。足以使所有工作?

必须添加的权限是:

"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(); 
    } 
} 
+0

我如何添加该权限?使用LoginButton.setReadPermission()或LoginButonn.setPublishPermissions()? – SctALE

+0

在代码中替换此行:'loginButton.setReadPermissions(“user_friends”,“public_profile”);''with'loginButton.setReadPermissions(“publish_actions”);' – Ashwani

+0

阅读此博客,它将帮助您理解:http:// simpledeveloper.com/how-to-share-an-image-on-facebook-in-android/ – Ashwani