安卓应用中的 Twitter 集成

34

我想将Twitter整合到我的Android应用中,以便我可以向Twitter发布消息。


这很简单,就像吃你最喜欢的蛋糕一样。请按照此教程操作:http://tech-papers.org/integrate-twitter-with-android-application/ - Balwinder SIngh
7个回答

20

这是我的做法

首先,我为Webview创建了一个对话框 Twitter_Dialog.java

public class Twitter_Dialog extends Dialog
{

static final int                      BLUE                  = 0xFF6D84B4;
static final float[]                  DIMENSIONS_DIFF_LANDSCAPE =
                                                                { 20, 60 };
static final float[]                  DIMENSIONS_DIFF_PORTRAIT  =
                                                                { 40, 60 };
static final FrameLayout.LayoutParams   FILL                    = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
static final int                      MARGIN                    = 4;
static final int                      PADDING                   = 2;
static final String                   DISPLAY_STRING            = "touch";

private String                        mUrl;
private ProgressDialog                mSpinner;
private WebView                       mWebView;
private LinearLayout                  mContent;
private TextView                      mTitle;

public Twitter_Dialog(Context context, String url)
{
    super(context);
    mUrl = url;
}

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    mSpinner = new ProgressDialog(getContext());
    mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
    mSpinner.setMessage("Loading...");

    mContent = new LinearLayout(getContext());
    mContent.setOrientation(LinearLayout.VERTICAL);
    setUpTitle();
    setUpWebView();
    Display display = getWindow().getWindowManager().getDefaultDisplay();
    final float scale = getContext().getResources().getDisplayMetrics().density;
    int orientation = getContext().getResources().getConfiguration().orientation;
    float[] dimensions = (orientation == Configuration.ORIENTATION_LANDSCAPE) ? DIMENSIONS_DIFF_LANDSCAPE : DIMENSIONS_DIFF_PORTRAIT;
    addContentView(mContent, new LinearLayout.LayoutParams(display.getWidth() - ((int) (dimensions[0] * scale + 0.5f)), display.getHeight() - ((int) (dimensions[1] * scale + 0.5f))));
}

private void setUpTitle()
{
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    Drawable icon = getContext().getResources().getDrawable(R.drawable.twitter_icon);
    mTitle = new TextView(getContext());
    mTitle.setText("Website");
    mTitle.setTextColor(Color.WHITE);
    mTitle.setTypeface(Typeface.DEFAULT_BOLD);
    mTitle.setBackgroundColor(BLUE);
    mTitle.setPadding(MARGIN + PADDING, MARGIN, MARGIN, MARGIN);
    mTitle.setCompoundDrawablePadding(MARGIN + PADDING);
    mTitle.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
    mContent.addView(mTitle);
}

private void setUpWebView()
{
    mWebView = new WebView(getContext());
    mWebView.setVerticalScrollBarEnabled(false);
    mWebView.setHorizontalScrollBarEnabled(false);
    mWebView.setWebViewClient(new Twitter_Dialog.DialogWebViewClient());
    mWebView.getSettings().setJavaScriptEnabled(true);
    System.out.println(" mURL = "+mUrl);

    mWebView.loadUrl(mUrl);
    mWebView.setLayoutParams(FILL);
    mContent.addView(mWebView);
}

private class DialogWebViewClient extends WebViewClient
{

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        view.loadUrl(url);
        return true;
    }
    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
    {
        super.onReceivedError(view, errorCode, description, failingUrl);
        Twitter_Dialog.this.dismiss();
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon)
    {
        super.onPageStarted(view, url, favicon);
        mSpinner.show();
    }

    @Override
    public void onPageFinished(WebView view, String url)
    {
        super.onPageFinished(view, url);
        String title = mWebView.getTitle();
        if (title != null && title.length() > 0){
            mTitle.setText(title);
            if(title.equals("Twitter")){
                //This will close the Dialog after tweeting
                Twitter_Dialog.this.dismiss();

            }
        }
        mSpinner.dismiss();
    }

}
}

//然后进入你的Main.java文件

public class Main extends Activity {
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            new Twitter_Dialog(Main.this,"http://twitter.com/?status="+Uri.encode("Twitter Post")).show();
    }

}

优秀的代码,但您能告诉我如何使用此代码发布图片吗? - Dilip
如何在 Twitter 上发布我的消息(我的游戏得分)? - Amol Dale
我怎样才能在Twitter上发布消息?点击按钮即可。 - Amol Dale

15

除了d.的可靠选择外,您还可以:

  • 使用ACTION_SEND IntentscreateChooser(),如果用户已经安装了Twitter应用程序(如Twidroid),他们可以使用它来更新他们的状态。
  • 使用现有的Twitter Java API,例如JTwitter。

我只是想看看你是如何进行集成的,结果却下载了下来。干得好! - SapphireSun
5
ACTION_SEND 这个名称太过于含糊不清。Gmail 和 Dropbox 是可以的。我建议你根据已知的包名对列表进行过滤。参考链接 - rds
删除了一条评论,更新了细节:我不再在我的Android应用程序中使用JTwitter(自那时以来,Twitter API和条款已经完全改变,使直接集成更具挑战性)。我制作的应用程序的源代码曾经可以做到这一点,名为Congress,现已移至:github.com/sunlightlabs/congress-android--但它不再具有直接的Twitter集成。 - Eric Mill

4

关于与Twitter通信的所有信息都在这里

如果您想从应用程序中发送HTTP请求,请查看此指南


2
您可以使用Twitter Helper将Twitter集成到您的Android应用程序中。它非常简单。

1

尝试使用这个简单的客户端 TwitterEasyClient

只需在您的清单中添加权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

并以以下方式使用它:
    //setup
    TwitterDialogFragment twitterDialog = new TwitterDialogFragment.Builder("message","url.com") //
    .callbackUrl("http://www.website.com") //
    .consumerKey("XXXXXXXXXXXXXXXXXXXXXX") //
    .consumerSecret("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX") //
    .urlOAuth("oauth_verifier") //
    .build();

    //show the dialog
    twitterDialog.show(getSupportFragmentManager(), TwitterDialogFragment.class.getSimpleName());

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接