在汤姆(Tom)的帮助下,我找到了答案(谢谢)。关键是使用Facebook Android SDK通过“ stream.publish” API调用创建对话框。步骤如下:
- 下载官方的Facebook Android SDK:http : //github.com/facebook/facebook-android-sdk
- 将项目文件导入Eclipse。
- 将项目导出为* .jar文件。(这可能会导致冲突)
[更新]
Facebook最近更新了源代码,我注意到该图标文件与我的项目(Android 1.5+)导致资源ID冲突。我的解决方案是忘记导出为jar。相反,直接将Facebook“ com”文件夹复制到应用程序的“ src”文件夹中(即“ com.facebook.android”应为应用程序中的一个包…与源文件一起)。如果“ src”文件夹中已经有一个“ com”文件夹,则不必担心出现任何有关覆盖文件的对话框,任何源文件都不应被覆盖。返回Eclipse,并刷新“ src”文件夹,“ com.facebook.android”现在应该作为软件包列出。将其中包含的Facebook图标之一复制到应用程序的“可绘制”文件夹中,并对其进行刷新。Eclipse会抱怨“ FbDialog.java”文件…只需将指向你应用程序“ R”文件的导入添加到该文件的头(例如,如果你应用程序的包名称是“ com.android.myapp”,则添加此:“导入com.android.myapp.R;”)。如果需要,请转到#5。
将.jar文件添加到项目的构建路径
查看以下简化的示例代码:
import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.LinearLayout;import com.facebook.android.*;import com.facebook.android.Facebook.DialogListener;public class FacebookActivity extends Activity implements DialogListener, OnClickListener{ private Facebook facebookClient; private LinearLayout facebookButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.test);//my layout xml facebookButton = (LinearLayout)this.findViewById(R.id.Test_Facebook_Layout); } @Override public void onComplete(Bundle values) { if (values.isEmpty()) { //"skip" clicked ? return; } // if facebookClient.authorize(...) was successful, this runs // this also runs after successful post // after posting, "post_id" is added to the values bundle // I use that to differentiate between a call from // faceBook.authorize(...) and a call from a successful post // is there a better way of doing this? if (!values.containsKey("post_id")) { try { Bundle parameters = new Bundle(); parameters.putString("message", "this is a test");// the message to post to the wall facebookClient.dialog(this, "stream.publish", parameters, this);// "stream.publish" is an API call } catch (Exception e) { // TODO: handle exception System.out.println(e.getMessage()); } } } @Override public void onError(DialogError e) { System.out.println("Error: " + e.getMessage()); } @Override public void onFacebookError(FacebookError e) { System.out.println("Error: " + e.getMessage()); } @Override public void onCancel() { } @Override public void onClick(View v) { if (v == facebookButton) { facebookClient = new Facebook(); // replace APP_API_ID with your own facebookClient.authorize(this, APP_API_ID, new String[] {"publish_stream", "read_stream", "offline_access"}, this); } }}


