2009-11-23 21 views
34

Mi piacerebbe integrare Twitter nella mia applicazione Android in modo che possa postare messaggi su Twitter.integrazione Twitter su app Android

+0

questo è semplice come mangiare la tua torta preferita .. seguire questo tutorial http://tech-papers.org/integrate-twitter-with-android-application/ –

risposta

15

Oltre alle scelte solide d di, si potrebbe:.

  • Usa ACTION_SENDIntents con createChooser(), e se l'utente dispone di un'applicazione Twitter installata (Twidroid) che possono utilizzarlo per aggiornare il proprio status
  • utilizzare un'API Twitter Java esistente, come JTwitter
+0

ho controllato fuori solo per vedere come hai fatto l'integrazione e ho finito col scaricare. Ottimo lavoro! – SapphireSun

+5

'ACTION_SEND' è troppo vago. Gmail e dropbox sono idonei. [Vi suggerisco di filtrare] (http://regis.decamps.info/blog/2011/06/intent-to-open-twitter-client-on-android/) l'elenco in base a nomi di pacchetti noti. – rds

+0

eliminati un commento, aggiornato dettagli: Non faccio uso di JTwitter nella mia app Android più (e l'API di Twitter e Termini è completamente cambiato da allora, rendendo l'integrazione diretta più impegnativo). Il codice sorgente per l'applicazione che ho fatto che ha usato per fare questo, il Congresso, ha anche spostato, a: github.com/sunlightlabs/congress-android - ma non ha più l'integrazione diretta Twitter. – Konklone

4

Tutto ciò che è necessario sapere sulla comunicazione con Twitter è here.

Per inviare richieste HTTP dall'applicazione, vedere this guide.

20

Questo è come lo faccio

Prima ho fatto un dialogo per la 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(); 
    } 

} 
} 

// E poi nella vostra 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(); 
    } 

} 
+0

codice eccellente, ma u può dirmi come postare un'immagine utilizzando questo codice – Dilip

+0

come può Twitte il mio messaggio (il mio punteggio di gioco) su Twitter. –

+0

Come non posso postare il massaggio su Twitter Clicca sul pulsante –

0

Sempre andare per le più recenti tecnologie, come l'integrazione di Twitter può essere fatto facilmente utilizzando Twitter4j, anche le API fornite da Twitter cambiano di volta in volta. Twiter SDK sarebbe una buona opzione. U can find the details for it here for twitter4j.

1

Prova con questo semplice client TwitterEasyClient

Basta aggiungere i permessi nel vostro manifesto

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

e usarlo in questo modo:

//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()); 
2

È possibile utilizzare Twitter Helper per integrare Twitter nell'app per Android. È molto semplice.

Problemi correlati