Skip to content

Android: Interfacing with twitter applications

by mat on January 13th, 2010

Below are some code snippets for sending messages to twitter from your application by utilizing a twitter application.

The following code will create a new intent(a request to android for something to happen) for the twidroid application and pass it the message we wish to send. It is important to set the type of the intent as it will fail without it (from at least android 1.5). It will then start the activity and we use a try/catch encase twidroid is not found.

	Intent intent = new Intent("com.twidroid.SendTweet");
	intent.putExtra("com.twidroid.extra.MESSAGE",
	"@stealthcopter Example tweet from android application");
	intent.setType("application/twitter"); 
	try {
		startActivity(intent);
	} 
	catch (ActivityNotFoundException e) {
		/* Handle Exception if Twidroid is not installed */
		Toast.makeText(this, "Twidroid not found.", Toast.LENGTH_SHORT).show();
	}

But what if someone has a different twitter application installed? this can be solved by offering the user a choice of application to open.

	Intent intent = new Intent(Intent.ACTION_SEND);
	intent.putExtra(Intent.EXTRA_TEXT,
	"@stealthcopter Example tweet from android application");
	intent.setType("application/twitter"); 
	try {
		startActivity(Intent.createChooser(intent, null));
	} 
	catch (ActivityNotFoundException e) {
		/* Handle Exception if no suitable apps installed */
		Toast.makeText(this, "No suitable apps found.", Toast.LENGTH_SHORT).show();
	}

By combining these two solutions we can make the choice dialog only pop up if the system cannot find the twidroid application. This can be then taken even further by asking the user if they wish to visit the market place to install a twitter application if none is found.

   new AlertDialog.Builder(WordCube.this)
   .setTitle("Get Twitter")
   .setMessage("No twitter Application not found. Goto market and install one now?")
   .setIcon(R.drawable.logo)
   .setNegativeButton(R.string.dialog_no, null)
                   .setPositiveButton(R.string.dialog_yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                	intentMarket("market://search?q=twitter");
                }
            })
   .show();

Where intentMarket() is defined a to open up the market and search for the specified application passed to it as a string.

public void intentMarket(String url){
	Intent i = new Intent(Intent.ACTION_VIEW); 
	Uri u = Uri.parse(url); 
	i.setData(u); 
	try {
		startActivity(i);
	} catch (ActivityNotFoundException e) {
		toastMessage("Market not found.");
	}
}

Below shows two screenshots from the wordcube application. This application is avaliable for android, see here for more information and download link (or visit market on your android device).

twidroid intent screenshot

twidroid intent called from wordcube


choice box after intent

choice box for twitter applications

Update: This is now taken into a complete function in this post.

6 Comments
  1. Hi,
    You can use this one too: http://mufumbo.wordpress.com/2010/06/18/using-native-twitter-app-intent-to-share-on-android/

    it’s a way to get the native twitter app.

    thanks
    rafa

  2. bDring permalink

    This worked great. Is there a way to send without clicking on the send button. I want my phone to monitor something and tweet the result when I am not around to send it.

  3. @bDring I don’t know if twidroid supports this, you should check with them, there are bound to be some library you can include to do so. Otherwise it wouldn’t be too difficult using the twitter api itself, as there is bound to be a java implementation somewhere.

  4. No offense, but I kinda want official twitter app than other twitter apps if I was about to use intent in my app

  5. @Pashcar did you see the second method? it pops up a selection of applications that respond to intent.setType(“application/twitter”); which is much better than assuming the person will have the official twitter app, or any at all.

  6. cobolt permalink

    I get an reference error: “Intent” is not defined. on row #113

    Intent /* this is row 113 */
    intent = new Intent(Intent.ACTION_SEND);
    intent.putExtra(Intent.EXTRA_TEXT,e.row.url);
    intent.setType(“application/twitter”);

    what am i doing wrong?

Leave a Reply

Note: I am currently writing my thesis so probably wont have time to reply to your comment
Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS