<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2554627090055424766</id><updated>2024-09-24T19:37:37.131-07:00</updated><category term="android"/><category term="R-Line"/><category term="android widget"/><category term="ItemizedOverlay"/><category term="Raleigh"/><category term="quattro"/><category term="Bus"/><category term="Maps"/><category term="Overlay"/><category term="advertising"/><category term="lottery"/><category term="phone"/><category term="AppWidgetProvider"/><category term="ArrayIndexOutOfBoundsException"/><category term="Google I/O"/><category term="MapView"/><category term="Mega Millions"/><category term="Muni"/><category term="Rail"/><category term="San Francisco"/><category term="android cdma roam override control root"/><category term="android favorite apps"/><category term="contest"/><category term="developer"/><category term="euro millians"/><category term="jackpot"/><category term="lg optimus s"/><category term="lotto"/><category term="powerball"/><category term="widget"/><title type='text'>Oakcity Android Lab</title><subtitle type='html'>Visit our blog as we explore Android Application development.  Check back for new applications and development tips.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-5525178936719587795</id><published>2011-04-14T19:49:00.001-07:00</published><updated>2011-04-14T19:55:58.508-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="contest"/><category scheme="http://www.blogger.com/atom/ns#" term="Google I/O"/><title type='text'>Google I/O Developer Conference</title><content type='html'>I&#39;m thrilled to announce that I will be attending &lt;a href=&quot;http://www.google.com/events/io/2011/&quot;&gt;Google&#39;s I/O Developer Conference&lt;/a&gt; this May.  The yearly conference covers everything nerdy at Google from App Engine to Android.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Even more exciting is that I won my ticket in the &lt;a href=&quot;https://sites.google.com/site/lastcallforio2011/quickfire-submissions&quot;&gt;Last Call for Google I/O 2011 Android Challenge&lt;/a&gt;.  10 winners were chosen from 70 app submissions.  The contest was particularly challenging as contestants had 20 hours to work.  Subtract eight hours for sleep as this new dad was not about to pull an all-nighter and use much needed sleep.  Despite never writing any animation in Android, I managed to pull something out with about 2 hours to spare.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/5525178936719587795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2011/04/google-io-developer-conference.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/5525178936719587795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/5525178936719587795'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2011/04/google-io-developer-conference.html' title='Google I/O Developer Conference'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-4054198050778216528</id><published>2011-04-14T19:38:00.000-07:00</published><updated>2011-04-14T19:48:59.268-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="ItemizedOverlay"/><category scheme="http://www.blogger.com/atom/ns#" term="Maps"/><title type='text'>Revisiting ItemizedOverlay</title><content type='html'>I previously blogged on ArrayIndexOutOfBoundException when modifying ItemizedOverlay items on-the-fly, stating that they could be avoided.  After much more use, I no longer believe ItemizedOverlay is safe for maps where content changes.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you&#39;re developing an application that uses Google&#39;s Map API for Android and you need to add/remove items from the map while displaying the map, you have a few options:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1) &quot;Allocate&quot; all your objects in advance and disable items that should not be shown.  This means you will not add/remove items to the ItemizedOverlay backing collection, but instead manage which ones are drawn in the draw() method.  This may work well for many, but did not work for my scenario.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2) Create your own implementation of Overlay that handles concurrent modifications to its data structure.  I chose this option, in particular because I didn&#39;t need all the capability that ItemizedOverlay offers.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3) Something else?&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/4054198050778216528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2011/04/revisiting-itemizedoverlay.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4054198050778216528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4054198050778216528'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2011/04/revisiting-itemizedoverlay.html' title='Revisiting ItemizedOverlay'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-8517503655101054558</id><published>2010-12-16T07:22:00.000-08:00</published><updated>2010-12-16T07:29:54.235-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android cdma roam override control root"/><title type='text'>Roam Override Widget</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjwFgT60_zNksSdUqFKOzSm6ygocdtpe3g_M4JxCHELgfqxFeECCtoEk2uxc1DsuLaKUZA0tR4E22r5Lva1fQuQ3SYkodFWIj3k2kT43XqDz3M_RpuaubtTPuNpgkH7zEUpAc_Jbisatil/s1600/roam_promo.png&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 180px; height: 120px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjwFgT60_zNksSdUqFKOzSm6ygocdtpe3g_M4JxCHELgfqxFeECCtoEk2uxc1DsuLaKUZA0tR4E22r5Lva1fQuQ3SYkodFWIj3k2kT43XqDz3M_RpuaubtTPuNpgkH7zEUpAc_Jbisatil/s320/roam_promo.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5551301454364004018&quot; /&gt;&lt;/a&gt;New app on the Android Market today, the Roam Override Widget.  The widget allows users of Qualcomm based CDMA phones to manually force their phone into a roaming mode.  This is particularly useful for users who occasionally experience a weak, unreliable signal, but the phone will not roam to the stronger network.  Unlike other options, this widget does not require root access.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tested on the LG Optimus S, but should work on others.  Give it a try and let us know your experience!  Most custom ROMs do not include the software stack required for this to work.  This app is targeting users who do not root or modify their ROM.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9kWGIfSzG6kehyphenhyphenXNjV6-2Okv2HYROLUSdxxUfWf-Ic56OHuylNZKybdA8CblB5-8ZZNm-go60Fg0j3Cupf88DoIYZV4RKvgDmjEYw-gD8MaOoLYHuI-wJNu21iAn56vjpTgbERAFyATpJ/s320/qrcode.png&quot; style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 210px; height: 210px;&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5551302125227633810&quot; /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/8517503655101054558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/12/roam-override-widget.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/8517503655101054558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/8517503655101054558'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/12/roam-override-widget.html' title='Roam Override Widget'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjwFgT60_zNksSdUqFKOzSm6ygocdtpe3g_M4JxCHELgfqxFeECCtoEk2uxc1DsuLaKUZA0tR4E22r5Lva1fQuQ3SYkodFWIj3k2kT43XqDz3M_RpuaubtTPuNpgkH7zEUpAc_Jbisatil/s72-c/roam_promo.png" height="72" width="72"/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-5387253998393010459</id><published>2010-11-23T05:55:00.000-08:00</published><updated>2010-11-23T06:21:01.677-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android favorite apps"/><title type='text'>Android Applications I Use</title><content type='html'>Putting the applications I write aside, here&#39;s a list of the Android applications I have installed in no particular order.  Applications in bold are used often.  I&#39;ll try to get back to this list and update with descriptions or links.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Amazon&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Angry Birds&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Autozone&lt;/li&gt;&lt;li&gt;Barcode Scanner&lt;/li&gt;&lt;li&gt;Chrome to Phone&lt;/li&gt;&lt;li&gt;Congress&lt;/li&gt;&lt;li&gt;eBay&lt;/li&gt;&lt;li&gt;Epicurious&lt;/li&gt;&lt;li&gt;&lt;b&gt;Facebook&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Google Finance&lt;/li&gt;&lt;li&gt;&lt;b&gt;Google Gesture Search&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Google Gmail&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Google Goggles&lt;/li&gt;&lt;li&gt;Google Buzz&lt;/li&gt;&lt;li&gt;&lt;b&gt;Google Search&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Google Sky Map&lt;/li&gt;&lt;li&gt;GPS Status&lt;/li&gt;&lt;li&gt;Hotspot Widget&lt;/li&gt;&lt;li&gt;&lt;b&gt;IMDb&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Google Maps&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Mileage&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Mint.com&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Google My Tracks&lt;/li&gt;&lt;li&gt;&lt;b&gt;Flixster&lt;/b&gt;&lt;/li&gt;&lt;li&gt;OBD II Reader&lt;/li&gt;&lt;li&gt;OpenSpark&lt;/li&gt;&lt;li&gt;Overstock&lt;/li&gt;&lt;li&gt;&lt;b&gt;Pandora&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Photoshop&lt;/li&gt;&lt;li&gt;&lt;b&gt;ESPN Scorecenter&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Shazam&lt;/li&gt;&lt;li&gt;&lt;b&gt;Google Shopper&lt;/b&gt;&lt;/li&gt;&lt;li&gt;ShopSavvy&lt;/li&gt;&lt;li&gt;StopWatch &amp;amp; Timer&lt;/li&gt;&lt;li&gt;&lt;b&gt;Swype&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Target&lt;/li&gt;&lt;li&gt;The Weather Channel&lt;/li&gt;&lt;li&gt;Torque&lt;/li&gt;&lt;li&gt;&lt;b&gt;Transdroid&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Twitter&lt;/li&gt;&lt;li&gt;Urbanspoon&lt;/li&gt;&lt;li&gt;&lt;b&gt;Google Voice&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Google Voice Search&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Wordpress&lt;/li&gt;&lt;li&gt;WRAL.com&lt;/li&gt;&lt;li&gt;&lt;b&gt;XBMC Remote&lt;/b&gt;&lt;/li&gt;&lt;li&gt;z4Root&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/5387253998393010459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/11/android-applications-i-use.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/5387253998393010459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/5387253998393010459'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/11/android-applications-i-use.html' title='Android Applications I Use'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-8062345804598041822</id><published>2010-11-18T07:54:00.000-08:00</published><updated>2010-11-18T10:21:00.107-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="lg optimus s"/><title type='text'>New Phone - LG Optimus S</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.lg.com/us/mobile-phones/images/LG-mobile-ls670-optimus-s-charcoal-large.png&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 335px; height: 495px;&quot; src=&quot;http://www.lg.com/us/mobile-phones/images/LG-mobile-ls670-optimus-s-charcoal-large.png&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;My previous phone, the HTC Hero was once considered high-end for an Android phone.  Back then, there wasn&#39;t much for choices, the Hero followed the HTC G1, and roughly matched the functionality of the MyTouch.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today there are a wide variety of phones from junk to super high-end.  I envy the owner&#39;s of the HTC EVO 4G, but it&#39;s difficult for me to justify the $200 up-front + $240 in additional fees over the 2 year contract.  RadioShack and Sprint recently offered a promotion for the new low-end LG Optimus S for $0, no rebate required.  That&#39;s $440 cheaper over 2 years than the EVO.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I took the plunge, and I&#39;m delightfully surprised at just how nice the Optimus S.  In many ways it&#39;s a big upgrade from my HTC Hero, but with a few caveats. Here&#39;s the quick rundown.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Improvements:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Stock Android 2.2.1 - Froyo tastes great.  &lt;/li&gt;&lt;li&gt;Faster CPU.  The 600mhz CPU is a big improvement, even beyond raw numbers.&lt;/li&gt;&lt;li&gt;GPU.  Added acceleration for graphics.  I can play Angry Birds now.&lt;/li&gt;&lt;li&gt;Slightly thinner, smaller.&lt;/li&gt;&lt;li&gt;More responsive touch screen.&lt;/li&gt;&lt;li&gt;Dedicated 2-stage camera button.&lt;/li&gt;&lt;li&gt;Dedicated voice dialer button.&lt;/li&gt;&lt;li&gt;No blinding notification light while charging&lt;/li&gt;&lt;li&gt;Proximity Sensor turns phone screen on and off automatically when calling.&lt;/li&gt;&lt;li&gt;Very fast and accurate GPS&lt;/li&gt;&lt;li&gt;Swype keyboard included free&lt;/li&gt;&lt;li&gt;Can be rooted.&lt;/li&gt;&lt;li&gt;Only Sprint app is SprintID.  No junk.&lt;/li&gt;&lt;li&gt;Wireless hotspot capability&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Drawbacks:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;No notification light for SMS, Email, Missed Calls, etc.&lt;/li&gt;&lt;li&gt;No trackball.  Made text editing a bit easier.&lt;/li&gt;&lt;li&gt;No light sensor.  Screen brightness is fixed to your setting.&lt;/li&gt;&lt;li&gt;No dedicated dial and hang up button.  Not really necessary on this phone.&lt;/li&gt;&lt;li&gt;Low-resolution 480x320 screen.&lt;/li&gt;&lt;li&gt;New Phone and Brand - No community for custom ROMs yet.&lt;/li&gt;&lt;li&gt;SprintID is confusing and an annoying addition.&lt;/li&gt;&lt;li&gt;The Google first time use wizards have been removed.  I found these helpful as an experienced Android user and they were certainly helpful to new Android users.&lt;/li&gt;&lt;li&gt;I can&#39;t tell if the Google Backup facility is there.  If I reset, will my apps automatically reinstall?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Bugs:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Included SD Card randomly mounts/remounts.   I replaced mine with an 8GB and this problem has never occurred.   &lt;/li&gt;&lt;li&gt;Can&#39;t set voicemail provider in settings.  I tried to set it as Google Voice, but there&#39;s no option.  So far this has had no functional drawbacks, but I like to do it &quot;right&quot;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Coming from a Hero, I can handle those drawbacks and gladly accept the improvements.  &lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/8062345804598041822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/11/new-phone-lg-optimus-s.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/8062345804598041822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/8062345804598041822'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/11/new-phone-lg-optimus-s.html' title='New Phone - LG Optimus S'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-3650489230332032131</id><published>2010-04-07T19:58:00.000-07:00</published><updated>2010-04-07T20:12:00.009-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="android widget"/><category scheme="http://www.blogger.com/atom/ns#" term="AppWidgetProvider"/><category scheme="http://www.blogger.com/atom/ns#" term="developer"/><category scheme="http://www.blogger.com/atom/ns#" term="widget"/><title type='text'>Android Widgets, the Lowest Common Denominator</title><content type='html'>I should be nicer, modern smartphones are meant to be intuitive and user friendly, but they&#39;re more powerful than ever and with that comes complexities.   As such, some people just don&#39;t know how to use an Android widget.  They see them, they may have even used them before, but they don&#39;t know how to use yours.&lt;br /&gt;&lt;br /&gt;What am I talking about?  If you&#39;ve written a Widget only application for Android, you may have encountered some baffling negative feedback; users complaining that the application just doesn&#39;t work.   In their defense, it might not entirely work.  After downloading an application from the Market, the user may encounter an installation complete screen with a button to launch the newly downloaded application.  In the latest versions of Android, if there&#39;s not an Activity defined to handle the MAIN intent, the button is grayed out.  But in older versions, I&#39;ve confirmed 1.5, that button is not grayed out.  When the user clicks the button, an error is displayed.&lt;br /&gt;&lt;br /&gt;Another way the user may encounter the same problem is from the notifications area.  A notification is made indicating that the application installed successfully.  When tapping on this notification the application is launched.  Again, without a main activity, on older versions of Android, this will result in an error.&lt;br /&gt;&lt;br /&gt;It may seem obvious to you that you&#39;ve developed an application, and the user should add it to their home screen by pressing &#39;Menu&#39; from the home screen and following the menus to add a widget.  Unfortunately, it&#39;s not obvious to everyone.  So here&#39;s the easy work-around.  Create a basic layout with just a TextView.   Fill the TextView with some instructions as to how a user should add the widget to their home screen.  Extend Activity and create a dumb Activity class that sets the content view to the instruction layout.  Finally, register this new Activity in your AndroidManifest as the consumer of the MAIN intent.&lt;br /&gt;&lt;br /&gt;Instead of encountering an error, the user is confronted with obvious, yet helpful instructions.  Hopefully you&#39;ll encounter a happier commenter as the result of these simple changes.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/3650489230332032131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/04/android-widgets-lowest-common.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/3650489230332032131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/3650489230332032131'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/04/android-widgets-lowest-common.html' title='Android Widgets, the Lowest Common Denominator'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-4161147072517897467</id><published>2010-04-01T12:18:00.000-07:00</published><updated>2010-04-01T13:26:12.324-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="Bus"/><category scheme="http://www.blogger.com/atom/ns#" term="Muni"/><category scheme="http://www.blogger.com/atom/ns#" term="Rail"/><category scheme="http://www.blogger.com/atom/ns#" term="San Francisco"/><title type='text'>San Francisco, CA Muni Bus Locator</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibs6OYjDxi4mlM-bzMjoEIX9RJrrBkZfnNOG31ZNTlupTrFVyebvDCfkiHQW7sGR7UV3mtHKN8x47pE3R8ANGi33hICTer3Fgjf4O-CsFHr044sSA3hAyppWWorG1aCyN5uaLIQ-3Xpupf/s1600/muni2.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibs6OYjDxi4mlM-bzMjoEIX9RJrrBkZfnNOG31ZNTlupTrFVyebvDCfkiHQW7sGR7UV3mtHKN8x47pE3R8ANGi33hICTer3Fgjf4O-CsFHr044sSA3hAyppWWorG1aCyN5uaLIQ-3Xpupf/s320/muni2.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5455259940036251682&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyJ8qup2z86btnWlyeMoyQXcpd9MZQm7eY5e6C9iuj3vcqZ8slcgWZp1aMao9MJhiePrENwZA3it-vOJauqyl1x0jJaFeNOdaSEPAfxCM5UjkdIOQXbIceBQbOyMBc9pTDGaGhp8qCrdIp/s1600/muni5.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyJ8qup2z86btnWlyeMoyQXcpd9MZQm7eY5e6C9iuj3vcqZ8slcgWZp1aMao9MJhiePrENwZA3it-vOJauqyl1x0jJaFeNOdaSEPAfxCM5UjkdIOQXbIceBQbOyMBc9pTDGaGhp8qCrdIp/s320/muni5.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5455259857064273698&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;market://search?q=pname:com.oakcity.nbus.sfmuni&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 82px; height: 82px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQJpSMHa_QZiXSEnoz04P13qoVpGu30ZHwniw0uCAATGSWD5YS9RFIISX1OcWk8ShkS1u_VLj85L7SLlq85j5G4R52jvlDGLC7HvIri2i-a4Ijo-_ZW81JW3lPQl5fZNXnTdFY8N358V3h/s320/qr-com_oakcity_nbus_sfmuni-82.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5455261982215720338&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaZapCkwi5-V1KB9WfNOd2eYQoC6uUtIrYWJTOEmJGrLjQPEQmsLriwMD_IKwM0zL552U0NAOtv1tK9F_2Ah6FeuVXoCqhDdot0dz8SsqQCBDtOqfeiJ5YN-H3zcfe46sqGkeSwjbMrmLY/s1600/muni3.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaZapCkwi5-V1KB9WfNOd2eYQoC6uUtIrYWJTOEmJGrLjQPEQmsLriwMD_IKwM0zL552U0NAOtv1tK9F_2Ah6FeuVXoCqhDdot0dz8SsqQCBDtOqfeiJ5YN-H3zcfe46sqGkeSwjbMrmLY/s320/muni3.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5455260121311800626&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;The Muni Bus Locator allows you to stay inside until the bus is outside.  Select a route, and the route, buses, and stops are drawn on an interactive map.  Click a bus to see it&#39;s speed and status.  Zoom in to see individual stops.  Select a  stop to see the predicted next arrivals.  Press the menu button to select another route, or change map mode mode from Map to Satellite.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Search the Market for: Muni Locator&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Or... Click/Scan the QR code below:</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4161147072517897467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4161147072517897467'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/04/san-francisco-ca-muni-bus-locator.html' title='San Francisco, CA Muni Bus Locator'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibs6OYjDxi4mlM-bzMjoEIX9RJrrBkZfnNOG31ZNTlupTrFVyebvDCfkiHQW7sGR7UV3mtHKN8x47pE3R8ANGi33hICTer3Fgjf4O-CsFHr044sSA3hAyppWWorG1aCyN5uaLIQ-3Xpupf/s72-c/muni2.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-5005305799415384005</id><published>2010-03-29T20:08:00.000-07:00</published><updated>2010-03-29T20:20:08.141-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="ItemizedOverlay"/><category scheme="http://www.blogger.com/atom/ns#" term="MapView"/><category scheme="http://www.blogger.com/atom/ns#" term="Overlay"/><title type='text'>Avoiding ConcurrentModificationException in MapView.draw()</title><content type='html'>Throwing this out there because it may help someone.  For whatever reason, you may have gotten the idea that you would like to add and remove Overlays to your MapView as you see fit.  Problem is, that MapView may be iterating through that List when you pull the rug out from under it and remove something from that List.  Adding is okay of course.&lt;br /&gt;&lt;br /&gt;Here&#39;s my advice, don&#39;t ever remove from it.  Just render it ineffective.  You may find it best to just empty the collection that backs your ItemizedOverlay.  Or override draw() and add a hook to return early without doing anything in a particular circumstance.  Of course, to do any of this you&#39;ll need to maintain a handy reference to the Overlay you add.&lt;br /&gt;&lt;br /&gt;So remember, it&#39;s okay to call mapView.getOverlays.add() at any time, but don&#39;t call mapView.getOverlays.remove(), because if the timing is off, it will blow up on you.&lt;br /&gt;&lt;br /&gt;While I&#39;m writing this, I was thinking, you may be able to call remove(), by first disabling your MapView.  That&#39;s worth a shot if it works in your scenario.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/5005305799415384005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/03/avoiding-concurrentmodificationexceptio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/5005305799415384005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/5005305799415384005'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/03/avoiding-concurrentmodificationexceptio.html' title='Avoiding ConcurrentModificationException in MapView.draw()'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-9219354844147431180</id><published>2010-03-29T19:48:00.000-07:00</published><updated>2010-03-29T20:07:23.447-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="ArrayIndexOutOfBoundsException"/><category scheme="http://www.blogger.com/atom/ns#" term="ItemizedOverlay"/><title type='text'>ItemizedOverlay and ArrayIndexOutOfBoundsException</title><content type='html'>If you&#39;re working with Google&#39;s Maps API on Android, you&#39;ve probably encountered an ArrayIndexOutofBoundsException in ItemizedOverlay.  To recap, ItemizedOverlay is a useful implementation of Overlay that displays a set of items on the map.  More often than not, your data is dynamic, and this set of items will grow or shrink over time.  It may even be an empty set.&lt;br /&gt;&lt;br /&gt;The ArrayIndexOutOfBounds exception is usually encountered because you&#39;ve done one or more of the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Overlayitem getItem(int position) returns null in your ItemizedOverlay&lt;/li&gt;&lt;li&gt;The set of items is empty (related to above).&lt;/li&gt;&lt;li&gt;You&#39;re concurrently modifying your backing Collection of OverlayItems while the draw() method is iterating through them.&lt;/li&gt;&lt;/ul&gt;Let&#39;s quickly look at a solution for each one of these.  The first is for you to solve.  Why is it returning null?  Debug your code.&lt;br /&gt;&lt;br /&gt;I&#39;ve read some crazy ideas about how to solve the 2nd problem, your backing collection is empty, and ItemizedOverlay pukes.  This is very easy to workaround.  Override the draw() methods, and return early.  Here&#39;s an example:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public boolean draw(Canvas canvas, MapView mapView, boolean shadow,long when) {&lt;br /&gt;   if (myBackingList.isEmpty()) {&lt;br /&gt;               return false; // False means there&#39;s no need to immediately redraw.&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Finally, it&#39;s important to know that when ItemizedOverlay is executing the draw() methods, it&#39;s actually looping through your Collection of OverlayItems by calling getItem() and size().  During this time it would be unwise to modify the collection.  Your first instinct is probably to use a synchronized collection or call Collections.synchronizedList (or whichever is appropriate).  But this probably won&#39;t help because ItemizedOverlay isn&#39;t calling the iterator on your collection, it doesn&#39;t know what your collection is.  Instead, it&#39;s calling getItem(), N times.  &lt;br /&gt;&lt;br /&gt;The approach that works is to synchronize access to your collection in getItem(), size(), and and your call to super.draw().  Additionally, you&#39;ll need to synchronize wherever in your code you modify the collection.&lt;br /&gt;&lt;br /&gt;So to wrap up, make sure you override draw() to handle the empty set scenario and synchronize access to your backing collection. &lt;br /&gt;&lt;br /&gt;Good luck!</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/9219354844147431180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/03/itemizedoverlay-and-arrayindexoutofboun.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/9219354844147431180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/9219354844147431180'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/03/itemizedoverlay-and-arrayindexoutofboun.html' title='ItemizedOverlay and ArrayIndexOutOfBoundsException'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-6684263673354736166</id><published>2010-03-10T20:40:00.000-08:00</published><updated>2010-03-10T20:43:39.907-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="quattro"/><category scheme="http://www.blogger.com/atom/ns#" term="R-Line"/><title type='text'>R-Line App without Ads</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQd03ZzLtuYq9e_vtd_grlXIGPOTEKopHHoo_A1uBSlpZloNPU2o9iajJt35qPaEndIThEL2PefKvGfFDEJj-sDTTxnREj66YhjRLxCkU69-lL3RnDBNBDVIC43OBnkCcwMrIdCleDXPM5/s1600-h/r-line_screenshot8.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQd03ZzLtuYq9e_vtd_grlXIGPOTEKopHHoo_A1uBSlpZloNPU2o9iajJt35qPaEndIThEL2PefKvGfFDEJj-sDTTxnREj66YhjRLxCkU69-lL3RnDBNBDVIC43OBnkCcwMrIdCleDXPM5/s320/r-line_screenshot8.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5447232155977293426&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Just to prove that I&#39;m not a full-on ad-whore, I&#39;ve removed the ads from the R-Line. After all, it is for my home town.  Enjoy!</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/6684263673354736166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/03/r-line-app-without-ads.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/6684263673354736166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/6684263673354736166'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/03/r-line-app-without-ads.html' title='R-Line App without Ads'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQd03ZzLtuYq9e_vtd_grlXIGPOTEKopHHoo_A1uBSlpZloNPU2o9iajJt35qPaEndIThEL2PefKvGfFDEJj-sDTTxnREj66YhjRLxCkU69-lL3RnDBNBDVIC43OBnkCcwMrIdCleDXPM5/s72-c/r-line_screenshot8.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-7214762631813018122</id><published>2010-02-23T14:10:00.000-08:00</published><updated>2010-02-23T14:12:01.358-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="R-Line"/><category scheme="http://www.blogger.com/atom/ns#" term="Raleigh"/><title type='text'>R-Line App featured on New Raleigh blog</title><content type='html'>The &lt;a href=&quot;http://www.newraleigh.com/&quot;&gt;New Raleigh&lt;/a&gt; blog was kind enough to mention the R-Line app in a story this week.  Check out their &lt;a href=&quot;http://www.newraleigh.com/articles/archive/dra-shuts-down-r-line-mobile-tracking-website-android-app-going-strong/&quot;&gt;blog post&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/7214762631813018122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/r-line-app-featured-on-new-raleigh-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/7214762631813018122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/7214762631813018122'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/r-line-app-featured-on-new-raleigh-blog.html' title='R-Line App featured on New Raleigh blog'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-3520934101465419543</id><published>2010-02-23T14:07:00.001-08:00</published><updated>2010-02-23T14:10:19.011-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="advertising"/><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="quattro"/><category scheme="http://www.blogger.com/atom/ns#" term="R-Line"/><title type='text'>Celebration!</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga6XmUDeBjHDb0Eng-sBAhKoCNtGCuDUIL8YG0H3qluAqMvG6lCTXDKdErjvlo2ubGvslgaDRTIRJJPEqP-ae15zk2AV4r7Uoa2hrAd9xDcUu3AlBK1JedHTxEcq0PYeiCndHYYJ0ILdPZ/s1600-h/champagne.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 245px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga6XmUDeBjHDb0Eng-sBAhKoCNtGCuDUIL8YG0H3qluAqMvG6lCTXDKdErjvlo2ubGvslgaDRTIRJJPEqP-ae15zk2AV4r7Uoa2hrAd9xDcUu3AlBK1JedHTxEcq0PYeiCndHYYJ0ILdPZ/s320/champagne.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5441564040508859058&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Break out the champagne, we&#39;ve just made our first dollar in advertising.  For you ad gurus, that&#39;s a Net eCPM of $2.42.  I suppose it could be worse for a user base of about 100 mobile phones.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/3520934101465419543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/celebration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/3520934101465419543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/3520934101465419543'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/celebration.html' title='Celebration!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga6XmUDeBjHDb0Eng-sBAhKoCNtGCuDUIL8YG0H3qluAqMvG6lCTXDKdErjvlo2ubGvslgaDRTIRJJPEqP-ae15zk2AV4r7Uoa2hrAd9xDcUu3AlBK1JedHTxEcq0PYeiCndHYYJ0ILdPZ/s72-c/champagne.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-3949859082920007365</id><published>2010-02-22T20:19:00.001-08:00</published><updated>2010-02-23T21:33:08.960-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="R-Line"/><category scheme="http://www.blogger.com/atom/ns#" term="Raleigh"/><title type='text'>R-Line App Updates</title><content type='html'>What&#39;s New?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Directional bus markers&lt;/li&gt;&lt;li&gt;New stop markers&lt;/li&gt;&lt;/ul&gt;What&#39;s fixed?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Missing bus location data&lt;/li&gt;&lt;li&gt;Bus marker not centered over location&lt;/li&gt;&lt;li&gt;Moved ad to top to avoid zoom buttons occasionally overlapping ad.&lt;/li&gt;&lt;li&gt;Maintains map state (zoom, etc) when rotating device.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/3949859082920007365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/r-line-app-updates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/3949859082920007365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/3949859082920007365'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/r-line-app-updates.html' title='R-Line App Updates'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-494818811558309237</id><published>2010-02-15T18:48:00.000-08:00</published><updated>2010-02-15T19:21:01.830-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="advertising"/><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="quattro"/><title type='text'>Generating Revenue with Ads</title><content type='html'>If you&#39;ve downloaded my R-Line app, you&#39;ll instantly notice the somewhat obnoxious banner advertisement at the bottom.  Actually, it&#39;s not that bad, if you&#39;re lucky enough to see an add from a more mainstream advertiser.  I&#39;ve seen a few tasteful and well done ads from Netflix, Dish Network, and others.  Some of the ring-tone advertisements are unfortunately very ugly.&lt;br /&gt;&lt;br /&gt;It&#39;s been a week since I published the R-Line app and it&#39;s time to give a quick assessment of what I&#39;ve seen with respect to ad revenue.  I had level expectations moving into this project.  The R-Line app has a very limited audience.  It&#39;s limited to people in the Raleigh, NC area, those of whom ride the downtown circular bus.  That&#39;s typically downtown workers, bar hoppers, and bus drivers.&lt;br /&gt;&lt;br /&gt;So how much coin did I rake in?  14 cents.&lt;br /&gt;&lt;br /&gt;Here&#39;s a frame of reference for the interested. There&#39;s been roughly 100 downloads, and 50 people who&#39;ve kept the app installed.  Each day there&#39;s an average of 35 ad impressions (how many times a new ad showed), and I have seen a total of 12 clicks.   Not too exciting, is it?&lt;br /&gt;&lt;br /&gt;I have had questions about the low rate of keepers.  Why have so many been quick to uninstall?  The ad data helps reveal some answers.  It appears there&#39;s plenty of people in Singapore, United Kingdom, Russia, and all other the world downloading the app.   But why!? It&#39;s English only, and clearly states that the app is specific to Raleigh, NC.  Who knows, either way, I expect these are the uninstallers.&lt;br /&gt;&lt;br /&gt;I&#39;m going to post the shameless &quot;donation&quot; version of the application, without advertisements.  Let&#39;s see what that does.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/494818811558309237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/generating-revenue-with-ads.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/494818811558309237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/494818811558309237'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/generating-revenue-with-ads.html' title='Generating Revenue with Ads'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-4320975703695826953</id><published>2010-02-15T18:40:00.000-08:00</published><updated>2010-02-15T18:47:08.060-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="ItemizedOverlay"/><category scheme="http://www.blogger.com/atom/ns#" term="Maps"/><category scheme="http://www.blogger.com/atom/ns#" term="Overlay"/><title type='text'>Updates on the R-Line</title><content type='html'>I&#39;ve made several improvements/bug fixes to the R-Line application.  Here&#39;s some noteworthy changes:&lt;br /&gt;&lt;br /&gt;I&#39;ve changed my ItemizedOverlay for the moving buses to return false for draw().  I previously had it return true to force the maps API to redraw the overlays.  The API docs tout this as a way to &quot;animate&quot; the layer.  Unfortunately, this creates continuous drawing and high cpu usage.  Instead, I created another listener to my data service to call the postInvalidate() on the MapView.  This forces the map to redraw the overlays whenever new data is downloaded.&lt;br /&gt;&lt;br /&gt;Also, within my ItemizedOverlay, I added some synchronizing to the data collection storing the buses.  Inside draw(), we can&#39;t see it, but it&#39;s iterating over the collection.  It&#39;s possible to call createItem(int i) on an item that no longer exists.  This created a rare force close when panning/zooming the map and an overlay item disappeared.  Using a Collections.synchronizedList() call to create a synchronized List was not enough.  Instead I added some synchronizations to draw() and the method where I update the collection.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/4320975703695826953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/updates-on-r-line.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4320975703695826953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4320975703695826953'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/updates-on-r-line.html' title='Updates on the R-Line'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-6056071450433699336</id><published>2010-02-08T20:57:00.000-08:00</published><updated>2010-02-08T21:00:33.430-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="phone"/><category scheme="http://www.blogger.com/atom/ns#" term="R-Line"/><category scheme="http://www.blogger.com/atom/ns#" term="Raleigh"/><title type='text'>Building on the R-Line App</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-GZeAeyweTMfOPQXldGv3InQ9sCT7Fqq0RoV0q-PWu33BHjLUOsVNg9pe_pl9GKyIQTk6-ONdwu0vM2G-s31wh8uuQsHOOD-rWJgdJg_NcbkBixVjWcywzAQ3fokRn8L8cV_IOFb1b6Eu/s1600-h/r-line_screenshot3.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-GZeAeyweTMfOPQXldGv3InQ9sCT7Fqq0RoV0q-PWu33BHjLUOsVNg9pe_pl9GKyIQTk6-ONdwu0vM2G-s31wh8uuQsHOOD-rWJgdJg_NcbkBixVjWcywzAQ3fokRn8L8cV_IOFb1b6Eu/s320/r-line_screenshot3.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5436103586868562402&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;I&#39;ve added two new features to the R-Line app.  First, you can now select between Map, Map + Traffic, and Satellite map modes.  I&#39;ve also added a pop-up legend to help with identifying map markers.  Touching the screen dismisses the legend. &lt;br /&gt;&lt;br /&gt;Both features are accessible via the pop-up options menu by pressing the phone &#39;menu&#39; button.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/6056071450433699336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/building-on-r-line-app.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/6056071450433699336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/6056071450433699336'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/building-on-r-line-app.html' title='Building on the R-Line App'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-GZeAeyweTMfOPQXldGv3InQ9sCT7Fqq0RoV0q-PWu33BHjLUOsVNg9pe_pl9GKyIQTk6-ONdwu0vM2G-s31wh8uuQsHOOD-rWJgdJg_NcbkBixVjWcywzAQ3fokRn8L8cV_IOFb1b6Eu/s72-c/r-line_screenshot3.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-4911421441198546287</id><published>2010-02-07T10:17:00.000-08:00</published><updated>2010-02-18T10:57:30.311-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android widget"/><category scheme="http://www.blogger.com/atom/ns#" term="Bus"/><category scheme="http://www.blogger.com/atom/ns#" term="phone"/><category scheme="http://www.blogger.com/atom/ns#" term="R-Line"/><category scheme="http://www.blogger.com/atom/ns#" term="Raleigh"/><title type='text'>R-Line App</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGb73nQhJz5E4E1lxfmGi0ibO0pN6LsdB3zcP1OuhHCWuz_V52lKSbiVsoQHV34FFtkOLn3JjYL-YGIQ8T3lG30oDd5tKLvYSZvDUy3qaxKkoDA4ylbQU5t-Yt5hW6iz3NKUw-6JFneI0q/s1600-h/r-line_screenshot2.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGb73nQhJz5E4E1lxfmGi0ibO0pN6LsdB3zcP1OuhHCWuz_V52lKSbiVsoQHV34FFtkOLn3JjYL-YGIQ8T3lG30oDd5tKLvYSZvDUy3qaxKkoDA4ylbQU5t-Yt5hW6iz3NKUw-6JFneI0q/s320/r-line_screenshot2.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5435573207277531202&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;I just published an application that displays real-time status of Raleigh, NC&#39;s downtown buses.  Currently, Raleigh&#39;s monitoring is limited the R-Line route.&lt;br /&gt;&lt;br /&gt;The two buses show up as black dots.  Red markers are bus stops.  The blue line is the primary route, and the red lines show the evening (after 6:30PM) modified routes.&lt;br /&gt;&lt;br /&gt;The app was fun to create.  It leverages web services, Google&#39;s Map APIs, and Quattro&#39;s advertisement APIs.  Sorry about the ads, but I couldn&#39;t help myself to try it out.  They should at least be occasionally targeted to the RDU market.&lt;br /&gt;&lt;br /&gt;Data updates every 5 seconds, although the bus data is usually only updated from the buses every 30 seconds.&lt;br /&gt;&lt;br /&gt;Future enhancements I hope to include click-able markers to display the stop name, bus name, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Make sure you&#39;ve upgraded to version 1.16 to ensure you continue to receive bus location updates.&lt;/span&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;market://search?q=pname:com.oakcity.rline&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 100px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHAFyYsXEg0N8AY16XCitZsynkt4Ee6kVlCYZj1Q2XWcMubpI5p3QAV78mMFu_Zl58f6oKOOFzTHPPBvgVaoLC33jXPRUalpe-XraU7ge-IIzSGRyMJ9lqsEbdEwfKIUcecSCKyYYV_2oA/s320/r-line_free_qr.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5438968371895240674&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/4911421441198546287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/r-line-app.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4911421441198546287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4911421441198546287'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2010/02/r-line-app.html' title='R-Line App'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGb73nQhJz5E4E1lxfmGi0ibO0pN6LsdB3zcP1OuhHCWuz_V52lKSbiVsoQHV34FFtkOLn3JjYL-YGIQ8T3lG30oDd5tKLvYSZvDUy3qaxKkoDA4ylbQU5t-Yt5hW6iz3NKUw-6JFneI0q/s72-c/r-line_screenshot2.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-7311411727453683553</id><published>2009-12-30T18:36:00.001-08:00</published><updated>2009-12-30T18:37:52.257-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android widget"/><category scheme="http://www.blogger.com/atom/ns#" term="euro millians"/><category scheme="http://www.blogger.com/atom/ns#" term="jackpot"/><title type='text'>Euro Millions Jackpot Widget</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWP-fzlA5qwepA3n43WD9ZQ3nTZY-GQuEkWHVPdvR7siF53OIrZ_mlh_rEvF9sFGKISj6lPJeUGa42Lt1ZEH7OuX9uV7yxiMkDJ3Q-Yeyw0FCwQEJGEN8p-Gf075rYkYJytE6WwqYHplIc/s1600-h/euromillions_screenshot3.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWP-fzlA5qwepA3n43WD9ZQ3nTZY-GQuEkWHVPdvR7siF53OIrZ_mlh_rEvF9sFGKISj6lPJeUGa42Lt1ZEH7OuX9uV7yxiMkDJ3Q-Yeyw0FCwQEJGEN8p-Gf075rYkYJytE6WwqYHplIc/s320/euromillions_screenshot3.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5421223686356848210&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;For our friends in Europe, we&#39;ve wrapped up our lottery widget suite with the Euro Millions Jackpot Widget.  The widget is selectable in either Euros or British pounds.   Enjoy.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/7311411727453683553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2009/12/euro-millions-jackpot-widget.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/7311411727453683553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/7311411727453683553'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2009/12/euro-millions-jackpot-widget.html' title='Euro Millions Jackpot Widget'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWP-fzlA5qwepA3n43WD9ZQ3nTZY-GQuEkWHVPdvR7siF53OIrZ_mlh_rEvF9sFGKISj6lPJeUGa42Lt1ZEH7OuX9uV7yxiMkDJ3Q-Yeyw0FCwQEJGEN8p-Gf075rYkYJytE6WwqYHplIc/s72-c/euromillions_screenshot3.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-8334073059333689391</id><published>2009-12-30T16:03:00.000-08:00</published><updated>2009-12-30T16:04:56.965-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android widget"/><category scheme="http://www.blogger.com/atom/ns#" term="lottery"/><category scheme="http://www.blogger.com/atom/ns#" term="Mega Millions"/><title type='text'>Mega Millions Jackpot Widget</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlH3u3m_ZyfB4wu-oQRd5c8whO2VWyySSHKvHxLb_YD-JOxwSXNzAbz04HPFY0yf0JTWBCwOfCLev2Ule-R3qqQEy4N1xphgT5TIztMzaVZ7dgV72P2fHbPTkha-pKjWeSXUjM7w4P1kxn/s1600-h/megamillions_screenshot3.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlH3u3m_ZyfB4wu-oQRd5c8whO2VWyySSHKvHxLb_YD-JOxwSXNzAbz04HPFY0yf0JTWBCwOfCLev2Ule-R3qqQEy4N1xphgT5TIztMzaVZ7dgV72P2fHbPTkha-pKjWeSXUjM7w4P1kxn/s320/megamillions_screenshot3.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5421184355599750002&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Building on our Powerball Jackpot Widget, we&#39;ve published the Mega Millions widget.  Find it in the Android Market.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/8334073059333689391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2009/12/mega-millions-jackpot-widget.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/8334073059333689391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/8334073059333689391'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2009/12/mega-millions-jackpot-widget.html' title='Mega Millions Jackpot Widget'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlH3u3m_ZyfB4wu-oQRd5c8whO2VWyySSHKvHxLb_YD-JOxwSXNzAbz04HPFY0yf0JTWBCwOfCLev2Ule-R3qqQEy4N1xphgT5TIztMzaVZ7dgV72P2fHbPTkha-pKjWeSXUjM7w4P1kxn/s72-c/megamillions_screenshot3.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2554627090055424766.post-4735974435595586502</id><published>2009-12-28T22:30:00.000-08:00</published><updated>2009-12-28T22:31:42.037-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android widget"/><category scheme="http://www.blogger.com/atom/ns#" term="lottery"/><category scheme="http://www.blogger.com/atom/ns#" term="lotto"/><category scheme="http://www.blogger.com/atom/ns#" term="powerball"/><title type='text'>Powerball Jackpot Widget</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4a80kzbe_iiN1BhwEJEUepi4MxI7O5mF8fSfQRS7UVsfJOsvK9H9NpNQuA5cV0_FEQATclnRMjYiB0QFP_giQerAoo0yLZ8OZMHfEzK4eQCUfrCWyk3WB-8zuGQh3O7aVm_WIEmknepPS/s1600-h/powerball_screenshot2.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 214px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4a80kzbe_iiN1BhwEJEUepi4MxI7O5mF8fSfQRS7UVsfJOsvK9H9NpNQuA5cV0_FEQATclnRMjYiB0QFP_giQerAoo0yLZ8OZMHfEzK4eQCUfrCWyk3WB-8zuGQh3O7aVm_WIEmknepPS/s320/powerball_screenshot2.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5420541938631555122&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Our first Android application has been published, the Powerball Jackpot Widget. Check out the demo in the Android Market. I was hoping to sell a version for 49 cents, however Google sets a minimum price of 99 cents.&lt;br /&gt;&lt;br /&gt;The Powerball Jackpot Widget displays the current Powerball annuity jackpot on your home screen. Always stay updated, and know when to play.&lt;br /&gt;&lt;br /&gt;Powerball is a trademark and under copyright of the Multi-State Lottery Association.</content><link rel='replies' type='application/atom+xml' href='http://oakcityandroid.blogspot.com/feeds/4735974435595586502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://oakcityandroid.blogspot.com/2009/12/powerball-jackpot-widget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4735974435595586502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2554627090055424766/posts/default/4735974435595586502'/><link rel='alternate' type='text/html' href='http://oakcityandroid.blogspot.com/2009/12/powerball-jackpot-widget.html' title='Powerball Jackpot Widget'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4a80kzbe_iiN1BhwEJEUepi4MxI7O5mF8fSfQRS7UVsfJOsvK9H9NpNQuA5cV0_FEQATclnRMjYiB0QFP_giQerAoo0yLZ8OZMHfEzK4eQCUfrCWyk3WB-8zuGQh3O7aVm_WIEmknepPS/s72-c/powerball_screenshot2.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>