2016-06-21 152 views
0

我會在我的應用程序中創建一張帶有照片和標題的帖子,並將其張貼在我的臉書上。 我不知道所需的步驟,所以我不知道我做錯了什麼。 主要活動在其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,我設置爲登錄按鈕。足以使所有工作?

回答

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

相關問題