The Fatal Assumptions blog post series will review some assumptions Android application developers may make, and why those assumptions may harm their app’s acceptance, immediately or in the near future.
Right now, every major Android device has a touchscreen. I say “major” because while there are a few netbooks without touchscreens, none have exactly caught fire in the marketplace.
Hence, right now, it seems safe for an Android developer to assume that all Android devices will have touchscreens. However, in the near future, that may be a fatal assumption…particularly if you don’t set up your manifest properly.
It is fairly likely that devices sans touchscreens will be hitting the market more substantially in 2010. Beyond the rumored Google TV running Android, there are other set-top box manufacturers at least experimenting with Android. It would not shock me to see some low-end smartphones being made without touchscreens, to cut the costs even further, particularly when aiming at markets that value simpler phones. Combine those with more netbooks and other new segments, and it’s reasonable to think that something running Android and without a touchscreen will be a significant player.
Ideally, your applications should not require a touchscreen, so they can be used on these newer devices. Standard Android widget-based UIs support navigation by D-pad or trackball — just test your app this way and confirm that it is indeed usable.
If you specifically need a touchscreen for your game or soundboard or whatever, that’s fine. However, you really should consider adding one or two <uses-configuration> elements to your AndroidManifest.xml file, with android:reqTouchScreen attributes. This way, you can indicate that your app indeed needs a touchscreen (designed for fingers, styluses, or both). This should prevent your app from being installed on devices without a touchscreen, so those users will not get frustrated and leave you with poor ratings on the Market. You might even do this if you intend to support a touchscreen but do not have time to test it thoroughly at this time.