<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lowe Quality Apps</title>
	<atom:link href="http://lowequalityapps.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lowequalityapps.com</link>
	<description>Lowe Quality... only the best!</description>
	<lastBuildDate>Fri, 03 Sep 2010 12:15:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>How to Post a Tweet to Twitter with the OAuth API</title>
		<link>http://lowequalityapps.com/how-to-post-a-tweet-to-twitter-with-the-oauth-api/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-post-a-tweet-to-twitter-with-the-oauth-api</link>
		<comments>http://lowequalityapps.com/how-to-post-a-tweet-to-twitter-with-the-oauth-api/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 22:38:21 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://lowequalityapps.com/?p=71</guid>
		<description><![CDATA[Recently, I released a few twitter wrapper apps. Apps that use twitter to do searches for specific #twitter tags.  I found that while there was tons of information on the internet about how to do it, I still had quite a bit of trouble putting together all of the pieces for Twitter&#8217;s new OAuth Api.]]></description>
			<content:encoded><![CDATA[<p>Recently, I released a few twitter wrapper apps. Apps that use twitter to do searches for specific #twitter tags.  I found that while there was tons of information on the internet about how to do it, I still had quite a bit of trouble putting together all of the pieces for Twitter&#8217;s new OAuth Api.  I found many great guides such as <a title="Twitter OAuth for Android" href="http://blog.sogeti.com/mobile/2010/03/twitter-oauth-for-android.html">this post on how to make an android callback</a>, <a title="Using Signpost with Twitter" href="http://code.google.com/p/oauth-signpost/wiki/TwitterAndSignpost">or this guide on using the Signpost library</a>.  Through a bunch of trial and error, I was able to put together a working version that posts tweets to a twitter account.  This is a code snippet from the Activity class for the submit tweet page.  This Activity presents a user with a button to log into their twitter account.  They are taken to the web browser where they give twitter their permission to use the app.  At that point, they are brought back to this activity through the onNewIntent method.  The necessary twitter account information is then stored in Android preferences objects for future use.</p>
<div class="geshi no java5">
<div class="head">&#8230;</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> SubmitTwitter <span class="kw2">extends</span> Activity <span class="kw2">implements</span> OnClickListener <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> PREFS_NAME = <span class="st0">&quot;AccountPrefs&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> PREFS_TWITTER_ACCOUNT_NAME = <span class="st0">&quot;TwitterAccountName&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> PREFS_TWITTER_USER_TOKEN = <span class="st0">&quot;TwitterUserToken&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> PREFS_TWITTER_USER_SECRET = <span class="st0">&quot;TwitterUserSecret&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> PREFS_TWITTER_USER_VERIFIER = <span class="st0">&quot;TwitterVerifier&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> CommonsHttpOAuthConsumer httpOauthConsumer<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> DefaultOAuthProvider httpOauthprovider<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> consumerKey = <span class="st0">&quot;[TWITTER_CONSUMER_KEY]&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> consumerSecret = <span class="st0">&quot;[TWITTER_CONSUMER_SECRET]&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> CALLBACKURL = <span class="st0">&quot;fml://submitTwitter&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;@<span class="kw21">Override</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">protected</span> <span class="kw3">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">submit_tweet</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; SharedPreferences settings = getSharedPreferences<span class="br0">&#40;</span>PREFS_NAME, MODE_PRIVATE<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>settings.<span class="me1">contains</span><span class="br0">&#40;</span>PREFS_TWITTER_ACCOUNT_NAME<span class="br0">&#41;</span> <span class="sy0">&amp;</span>amp<span class="sy0">;&amp;</span>amp<span class="sy0">;</span> <span class="kw4">null</span> <span class="sy0">!</span>= settings.<span class="me1">getString</span><span class="br0">&#40;</span>PREFS_TWITTER_ACCOUNT_NAME, <span class="kw4">null</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;twitterAccountName = settings.<span class="me1">getString</span><span class="br0">&#40;</span>PREFS_TWITTER_ACCOUNT_NAME, <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#40;</span><span class="br0">&#40;</span>TextView<span class="br0">&#41;</span>findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">currentUser</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">setText</span><span class="br0">&#40;</span>twitterAccountName<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw6">Button</span> signIn = <span class="br0">&#40;</span><span class="kw6">Button</span><span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">signIn</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; signIn.<span class="me1">setOnClickListener</span><span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw6">Button</span> signOut = <span class="br0">&#40;</span><span class="kw6">Button</span><span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">signOut</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; signOut.<span class="me1">setOnClickListener</span><span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw6">Button</span> submit = <span class="br0">&#40;</span><span class="kw6">Button</span><span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">submit</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; submit.<span class="me1">setOnClickListener</span><span class="br0">&#40;</span><span class="kw2">new</span> OnClickListener<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;@<span class="kw21">Override</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="kw3">void</span> onClick<span class="br0">&#40;</span><span class="kw116">View</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; EditText request = <span class="br0">&#40;</span>EditText<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">request</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw21">String</span> tweet = request.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="st0">&quot;&quot;</span>.<span class="me1">equals</span><span class="br0">&#40;</span>tweet<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;TwitterSearch.<span class="me1">Post</span><span class="br0">&#40;</span>getBaseContext<span class="br0">&#40;</span><span class="br0">&#41;</span>, tweet + <span class="st0">&quot; #fml&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;request.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;startActivity<span class="br0">&#40;</span><span class="kw2">new</span> Intent<span class="br0">&#40;</span>getBaseContext<span class="br0">&#40;</span><span class="br0">&#41;</span>, MainActivity.<span class="kw2">class</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;Toast.<span class="me1">makeText</span><span class="br0">&#40;</span>getBaseContext<span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="st0">&quot;You must include a Message.&quot;</span>, Toast.<span class="me1">LENGTH_LONG</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;@<span class="kw21">Override</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">protected</span> <span class="kw3">void</span> onNewIntent<span class="br0">&#40;</span>Intent intent<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">super</span>.<span class="me1">onNewIntent</span><span class="br0">&#40;</span>intent<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Uri uri = intent.<span class="me1">getData</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// Check if you got NewIntent event due to Twitter Call back only</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>uri <span class="sy0">!</span>= <span class="kw4">null</span> <span class="sy0">&amp;</span>amp<span class="sy0">;&amp;</span>amp<span class="sy0">;</span> uri.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">startsWith</span><span class="br0">&#40;</span>CALLBACKURL<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw21">String</span> verifier = uri</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;.<span class="me1">getQueryParameter</span><span class="br0">&#40;</span>oauth.<span class="me1">signpost</span>.<span class="me1">OAuth</span>.<span class="me1">OAUTH_VERIFIER</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// this will populate token and token_secret in consumer</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; httpOauthprovider.<span class="me1">retrieveAccessToken</span><span class="br0">&#40;</span>httpOauthConsumer,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; verifier<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; SharedPreferences prefs = getSharedPreferences<span class="br0">&#40;</span>PREFS_NAME, MODE_PRIVATE<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw21">String</span> userToken = httpOauthConsumer.<span class="me1">getToken</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw21">String</span> tokenSecret = httpOauthConsumer.<span class="me1">getTokenSecret</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Editor editor = prefs.<span class="me1">edit</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; editor.<span class="me1">putString</span><span class="br0">&#40;</span>PREFS_TWITTER_USER_TOKEN, userToken<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; editor.<span class="me1">putString</span><span class="br0">&#40;</span>PREFS_TWITTER_USER_SECRET, tokenSecret<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; editor.<span class="me1">putString</span><span class="br0">&#40;</span>PREFS_TWITTER_USER_VERIFIER, verifier<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; editor.<span class="me1">commit</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw21">Exception</span> e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Toast.<span class="me1">makeText</span><span class="br0">&#40;</span>getBaseContext<span class="br0">&#40;</span><span class="br0">&#41;</span>, e.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, Toast.<span class="me1">LENGTH_LONG</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;@<span class="kw21">Override</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw3">void</span> onClick<span class="br0">&#40;</span><span class="kw116">View</span> v<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;httpOauthConsumer = <span class="kw2">new</span> CommonsHttpOAuthConsumer<span class="br0">&#40;</span>consumerKey, consumerSecret<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;httpOauthprovider = <span class="kw2">new</span> DefaultOAuthProvider<span class="br0">&#40;</span><span class="st0">&quot;http://twitter.com/oauth/request_token&quot;</span>, <span class="st0">&quot;http://twitter.com/oauth/access_token&quot;</span>, <span class="st0">&quot;http://twitter.com/oauth/authorize&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw21">String</span> authUrl = httpOauthprovider.<span class="me1">retrieveRequestToken</span><span class="br0">&#40;</span>httpOauthConsumer, CALLBACKURL<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">this</span>.<span class="me1">startActivity</span><span class="br0">&#40;</span><span class="kw2">new</span> Intent<span class="br0">&#40;</span>Intent.<span class="me1">ACTION_VIEW</span>, Uri.<span class="me1">parse</span><span class="br0">&#40;</span>authUrl<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw21">Exception</span> e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Toast.<span class="me1">makeText</span><span class="br0">&#40;</span><span class="kw2">this</span>, e.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, Toast.<span class="me1">LENGTH_LONG</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>This is the static method call that does the post to Twitter.  It uses Signpost to create a signed request.</p>
<div class="geshi no java">
<div class="head">&#8230;</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> TwitterSearch <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw3">String</span> TWITTER_POST_STATUS_URI = <span class="st0">&quot;http://api.twitter.com/1/statuses/update.json&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> Post<span class="br0">&#40;</span><span class="kw3">Context</span> context, <span class="kw3">String</span> status<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; SharedPreferences prefs = context.<span class="me1">getSharedPreferences</span><span class="br0">&#40;</span>SubmitTwitter.<span class="me1">PREFS_NAME</span>, Activity.<span class="me1">MODE_PRIVATE</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">try</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;HttpPost post = <span class="kw2">new</span> HttpPost<span class="br0">&#40;</span>TWITTER_POST_STATUS_URI<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">final</span> <span class="kw3">List</span> nvps = <span class="kw2">new</span> <span class="kw3">ArrayList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nvps.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> BasicNameValuePair<span class="br0">&#40;</span><span class="st0">&quot;status&quot;</span>, status<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post.<span class="me1">setEntity</span><span class="br0">&#40;</span><span class="kw2">new</span> UrlEncodedFormEntity<span class="br0">&#40;</span>nvps, HTTP.<span class="me1">UTF_8</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// set this to avoid 417 error (Expectation Failed)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;post.<span class="me1">getParams</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setBooleanParameter</span><span class="br0">&#40;</span>CoreProtocolPNames.<span class="me1">USE_EXPECT_CONTINUE</span>, <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;OAuthConsumer consumer = <span class="kw2">new</span> CommonsHttpOAuthConsumer<span class="br0">&#40;</span>SubmitTwitter.<span class="me1">consumerKey</span>, SubmitTwitter.<span class="me1">consumerSecret</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;consumer.<span class="me1">setTokenWithSecret</span><span class="br0">&#40;</span>prefs.<span class="me1">getString</span><span class="br0">&#40;</span>SubmitTwitter.<span class="me1">PREFS_TWITTER_USER_TOKEN</span>, <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;prefs.<span class="me1">getString</span><span class="br0">&#40;</span>SubmitTwitter.<span class="me1">PREFS_TWITTER_USER_SECRET</span>, <span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;consumer.<span class="me1">sign</span><span class="br0">&#40;</span>post<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;HttpClient client = <span class="kw2">new</span> DefaultHttpClient<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">final</span> HttpResponse response = client.<span class="me1">execute</span><span class="br0">&#40;</span>post<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span> <span class="kw2">catch</span> <span class="br0">&#40;</span><span class="kw3">Exception</span> e<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;Log.<span class="me1">e</span><span class="br0">&#40;</span><span class="st0">&quot;TwitterSearch&quot;</span>, e.<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Finally we register our callback in our AndroidManifest.xml</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;intent-filter<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;data</span> <span class="re0">android:scheme</span>=<span class="st0">&quot;fml&quot;</span> <span class="re0">android:host</span>=<span class="st0">&quot;submitTwitter&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/intent-filter<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>I wouldn&#8217;t do it justice to attempt to explain in detail what is going on here&#8230; instead I would recommend looking over the blogs I pointed out above.  Feel free to email me with any questions you have.  I certainly believe that since Android is an open platform, as developers we owe it to each other to help to make the best apps possible.  Email me at ryan at lowequalityapps.com</p>
]]></content:encoded>
			<wfw:commentRss>http://lowequalityapps.com/how-to-post-a-tweet-to-twitter-with-the-oauth-api/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introducing Pray for Me!</title>
		<link>http://lowequalityapps.com/introducing-pray-for-me/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=introducing-pray-for-me</link>
		<comments>http://lowequalityapps.com/introducing-pray-for-me/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 23:45:08 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://lowequalityapps.com/?p=64</guid>
		<description><![CDATA[Using Twitter, Pray for Me discovers prayer requests from around the world.  Submit your own prayer request with your own Twitter account. Perfect way to help others around the world with the power of prayer! New Features coming soon! - Search for Prayers by location - Respond to prayer requests - Many more]]></description>
			<content:encoded><![CDATA[<p><a href="http://lowequalityapps.com/wp-content/uploads/2010/08/market___search_q_pname_.png"><img class="alignright size-thumbnail wp-image-59" title="Pray QR Code" src="http://lowequalityapps.com/wp-content/uploads/2010/08/market___search_q_pname_-150x150.png" alt="" width="150" height="150" /></a>Using Twitter, Pray for Me discovers prayer requests from around the world.  Submit your own prayer request with your own Twitter account.</p>
<p>Perfect way to help others around the world with the power of prayer!</p>
<p>New Features coming soon!<br />
- Search for Prayers by location<br />
- Respond to prayer requests<br />
- Many more</p>
]]></content:encoded>
			<wfw:commentRss>http://lowequalityapps.com/introducing-pray-for-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GPS Phone Silencer passes the 50 download mark</title>
		<link>http://lowequalityapps.com/gps-phone-silencer-pass-the-50-download-mark/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gps-phone-silencer-pass-the-50-download-mark</link>
		<comments>http://lowequalityapps.com/gps-phone-silencer-pass-the-50-download-mark/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 02:20:21 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Android Apps]]></category>
		<category><![CDATA[GPS Phone Silencer]]></category>
		<category><![CDATA[AndroidApps]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Ringer]]></category>
		<category><![CDATA[Silence]]></category>
		<category><![CDATA[Vibrate]]></category>

		<guid isPermaLink="false">http://lowequalityapps.com/?p=39</guid>
		<description><![CDATA[GPS Phone Silencer just passed the 50 download mark.  See for yourself why people are enjoying this cheaper alternative to Locale for simple Phone ringer settings.]]></description>
			<content:encoded><![CDATA[<p>GPS Phone Silencer just passed the 50 download mark.  See for yourself why people are enjoying this cheaper alternative to Locale for simple Phone ringer settings.</p>
]]></content:encoded>
			<wfw:commentRss>http://lowequalityapps.com/gps-phone-silencer-pass-the-50-download-mark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Version 1.4 of GPS Phone Silencer Released</title>
		<link>http://lowequalityapps.com/version-1-4-of-gps-phone-silencer-released/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=version-1-4-of-gps-phone-silencer-released</link>
		<comments>http://lowequalityapps.com/version-1-4-of-gps-phone-silencer-released/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 01:41:30 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Android Apps]]></category>
		<category><![CDATA[GPS Phone Silencer]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AndroidApps]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Ringer]]></category>
		<category><![CDATA[Silence]]></category>
		<category><![CDATA[Vibrate]]></category>

		<guid isPermaLink="false">http://lowequalityapps.com/?p=34</guid>
		<description><![CDATA[GPS Phone Silencer v1.4 has been released.  This new version allows you to set your ringer (On/Silent/Vibrate) depending on Wifi connections.  Have a Wifi connection at work?  Set your phone to automatically go on Vibrate when you are connected.  Set your phone to be on ringer when you are disconnected from all Wifi networks (like]]></description>
			<content:encoded><![CDATA[<p><a href="http://lowequalityapps.com/wp-content/uploads/2010/06/gps.png"><img class="alignright size-thumbnail wp-image-24" title="GPS QR Code" src="http://lowequalityapps.com/wp-content/uploads/2010/06/gps-150x150.png" alt="" width="150" height="150" /></a>GPS Phone Silencer v1.4 has been released.  This new version allows you to set your ringer (On/Silent/Vibrate) depending on Wifi connections.  Have a Wifi connection at work?  Set your phone to automatically go on Vibrate when you are connected.  Set your phone to be on ringer when you are disconnected from all Wifi networks (like in the car).</p>
<p>Download it now in the App Store.</p>
]]></content:encoded>
			<wfw:commentRss>http://lowequalityapps.com/version-1-4-of-gps-phone-silencer-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Version 1.3 of GPS Phone Silencer Released</title>
		<link>http://lowequalityapps.com/version-1-3-of-gps-phone-silencer-released/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=version-1-3-of-gps-phone-silencer-released</link>
		<comments>http://lowequalityapps.com/version-1-3-of-gps-phone-silencer-released/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 11:42:01 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Android Apps]]></category>
		<category><![CDATA[GPS Phone Silencer]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AndroidApps]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Ringer]]></category>
		<category><![CDATA[Silence]]></category>
		<category><![CDATA[Vibrate]]></category>

		<guid isPermaLink="false">http://lowequalityapps.com/?p=32</guid>
		<description><![CDATA[GPS Phone Silencer v1.3 has been released.  In this version, a more accurate and battery conservative method of running the schedule operations.  Coming soon will include location sensitivity options as well as a GPS schedule to help conserve your battery.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lowequalityapps.com/wp-content/uploads/2010/06/gps.png"><img class="alignright size-full wp-image-24" title="GPS QR Code" src="http://lowequalityapps.com/wp-content/uploads/2010/06/gps.png" alt="" width="147" height="147" /></a>GPS Phone Silencer v1.3 has been released.  In this version, a more accurate and battery conservative method of running the schedule operations.  Coming soon will include location sensitivity options as well as a GPS schedule to help conserve your battery.</p>
]]></content:encoded>
			<wfw:commentRss>http://lowequalityapps.com/version-1-3-of-gps-phone-silencer-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New QR Barcode for Easy Access to GPS Phone Silencer</title>
		<link>http://lowequalityapps.com/new-qr-barcode-for-easy-access-to-gps-phone-silencer/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=new-qr-barcode-for-easy-access-to-gps-phone-silencer</link>
		<comments>http://lowequalityapps.com/new-qr-barcode-for-easy-access-to-gps-phone-silencer/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 12:21:56 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Android Apps]]></category>
		<category><![CDATA[GPS Phone Silencer]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AndroidApps]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Ringer]]></category>
		<category><![CDATA[Silence]]></category>
		<category><![CDATA[Vibrate]]></category>

		<guid isPermaLink="false">http://lowequalityapps.com/?p=28</guid>
		<description><![CDATA[Get the Barcode app from the android marketplace and easily get other apps.  Including the GPS Phone Silencer app using the barcode below:]]></description>
			<content:encoded><![CDATA[<p>Get the Barcode app from the android marketplace and easily get other apps.  Including the GPS Phone Silencer app using the barcode below:</p>
<p><a href="http://lowequalityapps.com/wp-content/uploads/2010/06/gps.png"><img class="alignnone size-full wp-image-24" title="GPS QR Code" src="http://lowequalityapps.com/wp-content/uploads/2010/06/gps.png" alt="" width="300" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lowequalityapps.com/new-qr-barcode-for-easy-access-to-gps-phone-silencer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing GPS Phone Silencer</title>
		<link>http://lowequalityapps.com/introducing-gps-phone-silencer/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=introducing-gps-phone-silencer</link>
		<comments>http://lowequalityapps.com/introducing-gps-phone-silencer/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 22:30:54 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Android Apps]]></category>
		<category><![CDATA[GPS Phone Silencer]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AndroidApps]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Ringer]]></category>
		<category><![CDATA[Silence]]></category>
		<category><![CDATA[Vibrate]]></category>

		<guid isPermaLink="false">http://lowequalityapps.com/?p=19</guid>
		<description><![CDATA[Lowe Quality Apps presents the GPS Phone Silencer.  Just released to the android market.  Check out the details page and buy it on your handheld today!]]></description>
			<content:encoded><![CDATA[<p>Lowe Quality Apps presents the GPS Phone Silencer.  Just released to the android market.  Check out the <a title="GPS Phone Silencer" href="http://lowequalityapps.com/?page_id=8">details page</a> and buy it on your handheld today!</p>
<div id="attachment_11" class="wp-caption alignnone" style="width: 330px"><a href="http://lowequalityapps.com/wp-content/uploads/2010/06/home.png"><img class="size-full wp-image-11" title="Home Screen" src="http://lowequalityapps.com/wp-content/uploads/2010/06/home.png" alt="Home Screen" width="320" height="480" /></a><p class="wp-caption-text">Home screen shows the current settings</p></div>
]]></content:encoded>
			<wfw:commentRss>http://lowequalityapps.com/introducing-gps-phone-silencer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome to Lowe Quality Apps</title>
		<link>http://lowequalityapps.com/welcome-to-lowe-quality-apps/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=welcome-to-lowe-quality-apps</link>
		<comments>http://lowequalityapps.com/welcome-to-lowe-quality-apps/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 18:20:48 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Android Apps]]></category>
		<category><![CDATA[GPS Phone Silencer]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AndroidApps]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Ringer]]></category>
		<category><![CDATA[Silence]]></category>
		<category><![CDATA[Vibrate]]></category>

		<guid isPermaLink="false">http://lowequalityapps.com/?p=6</guid>
		<description><![CDATA[Welcome to the Lowe Quality Application website!  Stay tuned for news and features on latest android applications.  Buy them on your handheld today!]]></description>
			<content:encoded><![CDATA[<p>Welcome to the Lowe Quality Application website!  Stay tuned for news and features on latest android applications.  Buy them on your handheld today!</p>
]]></content:encoded>
			<wfw:commentRss>http://lowequalityapps.com/welcome-to-lowe-quality-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
