<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0ACRHoyfCp7ImA9WhVTEEw.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514</id><updated>2012-02-23T15:42:45.494Z</updated><category term="chooser list" /><category term="tts" /><category term="android marketplaces" /><category term="market ratings" /><category term="market comments" /><category term="text to speech" /><category term="trolls" /><category term="Object Oriented development" /><category term="objects" /><category term="android developer tutorials" /><category term="android getting started" /><category term="battery widget" /><category term="extend" /><category term="android basics" /><category term="trolling" /><category term="send intent" /><category term="widget development" /><category term="interface" /><category term="android tutorial sites" /><category term="implement" /><category term="overriding" /><category term="inheritance" /><category term="share button" /><category term="battery level" /><category term="android directories" /><category term="android developer resources" /><category term="android widgets" /><category term="android listings" /><category term="Eclipse" /><category term="classes" /><category term="android app stores" /><category term="widget apps" /><category term="android developer guides" /><category term="android activity" /><title>Android Things</title><subtitle type="html">Android developer tutorials, tips, resources and thoughts. Because outside of the official Google Android site, there doesn't seem to be a huge amount...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://androidthings.blogspot.com/" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AndroidThings" /><feedburner:info uri="androidthings" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0ACRHs7eyp7ImA9WhVTEEw.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514.post-5228137126744545577</id><published>2012-02-20T18:22:00.004Z</published><updated>2012-02-23T15:42:45.503Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-23T15:42:45.503Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android widgets" /><category scheme="http://www.blogger.com/atom/ns#" term="widget apps" /><category scheme="http://www.blogger.com/atom/ns#" term="battery widget" /><category scheme="http://www.blogger.com/atom/ns#" term="widget development" /><category scheme="http://www.blogger.com/atom/ns#" term="battery level" /><title>Creating an Android Battery Widget</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-2AtQEq2TuFs/T0KQMGSlWxI/AAAAAAAAAFE/lZaUM3B3rNQ/s1600/battery_preview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-2AtQEq2TuFs/T0KQMGSlWxI/AAAAAAAAAFE/lZaUM3B3rNQ/s1600/battery_preview.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I recently approached the task of developing an Android widget for the first time. I created an Android battery level widget, mainly so that I could write a tutorial on it.&lt;br /&gt;
&lt;br /&gt;
You can download that tutorial here:&lt;br /&gt;
&lt;a href="http://marketplace.tutsplus.com/item/jump-into-android-create-a-battery-level-widget/1399566"&gt;Jump Into Android - Create a Battery Level Widget&lt;/a&gt;&lt;br /&gt;
[&lt;i&gt;it's premium but a bargain at $6..!&lt;/i&gt;]&lt;br /&gt;
&lt;br /&gt;
Anyway, in this article I thought I'd run through a few tips for creating Android widgets, with specific guidance on retrieving and displaying information about aspects of phone state, such as the battery level. We won't go into too much detail here, but hopefully you'll find it a useful overview of Android widget development.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What's the Difference?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
In many ways widget development for Android is the same as development for any other app type on the platform. However, although the differences are slight, they can throw you off when you attempt a widget for the first time. I would strongly recommend not attempting a widget as your first app, but instead trying Android widget development after you've tried developing at least one standard application.&lt;br /&gt;
&lt;br /&gt;
You will presumably already know the difference between widgets and other Android apps from the user's point of view, so let's start there. Widgets are not launched from the application menu, but are instead added to the user's homescreen. Some widgets are interactive, normally allowing users to choose settings on pressing the widget once it is on screen, or when it runs for the first time. The download and installation process is basically the same as for other apps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What you Don't Need to Do&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Since widget apps are not launched in the same way as normal apps, your project structure does not need a main Activity class to execute when the application starts up. As well as removing the need for an Activity class file, this means you do not need to include your main launcher Activity in the project Manifest XML file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What to Do Instead&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Instead of a main Activity class, your widget apps need to extend the AppWidgetProvider class. You also need to include your widget provider in the Manifest as a receiver item, specifying a metadata file along with it. If your widget is going to update, you need to indicate this within the Manifest too, using an intent filter. Your metadata file should be saved in "res/xml" and the code within it should define the basic aspects of your widget, including its dimensions and update frequency where appropriate. The metadata file can also specify an initial XML layout resource to use when the widget appears.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Options&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
That's basically all you need for a widget, but depending on your own project you may need additional elements. For example, you can override the AppWidgetProvider methods, such as onUpdate, specifying what should happen when the widget updates, which will often involve altering the visual display.&lt;br /&gt;
&lt;br /&gt;
You can optionally include an Activity in your app for configuring the widget. Similarly, you can make the widget interactive by supplying a click listener and presenting an options setting section for your users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Running and Testing&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Testing widgets is roughly the same as testing other Android apps, with some exceptions depending on the nature of your own particular projects. For example, when I created my battery level widget, I could only test it properly by running it on a device, because the emulator by default only shows a battery level of 50%. It's always preferable to test your apps on real devices anyway.&lt;br /&gt;
&lt;br /&gt;
Some widgets have serious performance implications. For example, you can use the AlarmManager class to provide more frequent updates to a widget than you can using the XML metadata method. In such apps, you really need to pay extra attention to efficiency, or your users will be dismayed to see their battery levels draining too fast.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Phone State Including Battery Level&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
So far we've discussed widgets generally, but you have an additional set of considerations if you're creating a widget to indicate phone state such as battery level. To create this type of widget, you need to register for a receiver. This basically means telling the system to inform your app about changes in state.&lt;br /&gt;
&lt;br /&gt;
If you are setting your widget update frequency in the XML metadata, the most often it can receive updates is every 30 minutes. To update more often, you can use a service, implementing an alarm if the widget needs to update when the device is asleep. You will also need a service if your widget is fetching data over the Web.&lt;br /&gt;
&lt;br /&gt;
The Android system issues broadcasts about certain aspects of the device. Some of these are described as "sticky", including the battery level. This means that the last broadcast hangs around the system, allowing your widgets to access the data within it at any time. For a battery level widget that only updates at the frequency set in the XML metadata, this means that the displayed level will actually be whatever the last level broadcast was, which may have been any time in the past half hour at most. Naturally, this is not ideal for all apps, which is why many of them use services and alarms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
So that's an overview of the basics when developing widget apps. Here are a few related links:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.android.com/guide/topics/appwidgets/index.html"&gt;Android Developers Guide - App Widgets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vogella.de/articles/AndroidWidgets/article.html"&gt;Vogella - Android Homescreen Widgets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://buildmobile.com/how-to-code-an-android-widget"&gt;Build Mobile - How to Code an Android Widget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html"&gt;Android Developers Guide - App Widget Design Guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/training/monitoring-device-state/battery-monitoring.html"&gt;Android Developers Guide - Monitoring the Battery Level and Charging State&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;And don't forget my lovely &lt;a href="http://marketplace.tutsplus.com/item/jump-into-android-create-a-battery-level-widget/1399566"&gt;Battery Level&lt;/a&gt; tutorial!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8119365238245677514-5228137126744545577?l=androidthings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2j5WslAdh-rKUtTvhhLpri_o4ts/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2j5WslAdh-rKUtTvhhLpri_o4ts/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2j5WslAdh-rKUtTvhhLpri_o4ts/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2j5WslAdh-rKUtTvhhLpri_o4ts/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidThings/~4/uhAAN9pVhX8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/5228137126744545577/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://androidthings.blogspot.com/2012/02/creating-android-battery-widget.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/5228137126744545577?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/5228137126744545577?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidThings/~3/uhAAN9pVhX8/creating-android-battery-widget.html" title="Creating an Android Battery Widget" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-2AtQEq2TuFs/T0KQMGSlWxI/AAAAAAAAAFE/lZaUM3B3rNQ/s72-c/battery_preview.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://androidthings.blogspot.com/2012/02/creating-android-battery-widget.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cHRHozfCp7ImA9WhRbEEk.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514.post-3154100225619025631</id><published>2012-01-31T22:03:00.002Z</published><updated>2012-01-31T22:30:35.484Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-31T22:30:35.484Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="inheritance" /><category scheme="http://www.blogger.com/atom/ns#" term="extend" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="objects" /><category scheme="http://www.blogger.com/atom/ns#" term="classes" /><category scheme="http://www.blogger.com/atom/ns#" term="Object Oriented development" /><category scheme="http://www.blogger.com/atom/ns#" term="interface" /><category scheme="http://www.blogger.com/atom/ns#" term="implement" /><category scheme="http://www.blogger.com/atom/ns#" term="overriding" /><title>Object Oriented Concepts for Android Development in Java</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-_7-7pVucyUE/TyhhlVHFBrI/AAAAAAAAAEs/Vw0f-6imkJ0/s1600/android_oo_preview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-_7-7pVucyUE/TyhhlVHFBrI/AAAAAAAAAEs/Vw0f-6imkJ0/s1600/android_oo_preview.png" /&gt;&lt;/a&gt;&lt;/div&gt;If you're learning Android development but have no prior experience of either Java or Object Oriented development in general, you can get yourself up to speed on the essential concepts pretty easily. A few aspects of Object Oriented development can help to make the best of your Android projects, without having to embark on a lengthy training process.&lt;br /&gt;
&lt;br /&gt;
Providing you have programming experience of some kind, you can go some way towards getting to grips with OO Android by familiarising yourself with the basic principles we'll introduce in this article. Along the way we'll hopefully demystify some potentially confusing language you may have come across on the topic.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Classes and Objects&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Object Oriented development essentially means dividing up the processing tasks in an application between a group of objects. Developers begin designing such applications by defining these objects at an abstract level, assigning the various responsibilities required by the app. To implement objects in code, you create class declarations.&lt;br /&gt;
&lt;br /&gt;
A class declaration is normally a single file in a Java project, in which you declare the properties and behaviour that objects of the class will provide. Think of a class declaration as a description of an object in general terms. Once an app has a class declaration, other code within the application can create objects of the class, each of which will match the description outlined in the declaration, but with differences in terms of data.&lt;br /&gt;
&lt;br /&gt;
The following Java code demonstrates a simple class declaration for illustration:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public class Worker {
  //instance variable
 private String name;
 
  //constructor method
 public Worker(String workerName) {
  name=workerName;
 }
 
  //method to return name
 public String getName() { return name; }
}&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Using Objects&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Code external to the class, for example within another Java file in the application package, can instantiate objects of this class as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;Worker adminHelper = new Worker("Jim");
Worker managementHelper = new Worker("Mary");
&lt;/pre&gt;&lt;br /&gt;
This code declares and instantiates two Worker object variables. Stating the name and type of an object is declaring it. Creating an instance of the class and assigning this to the object variable is instantiation. Although these two objects are of the same class, they have different data, in this case simply the string name variable.&lt;br /&gt;
&lt;br /&gt;
When this code executes, Java runs the constructor method within the class declaration. Within the constructor, the code assigns a value to the one class instance variable with the string value passed as a parameter when creating the new object. Once the "customer" code has an object of the class, it can call any public methods in it as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;String adminName = adminHelper.getName();&lt;/pre&gt;&lt;br /&gt;
The "getName" method returns the string instance variable. Public methods and variables can be accessed outside the class, while private resources, such as the instance variable, are only available inside the declaration.&lt;br /&gt;
&lt;br /&gt;
These examples are for demonstration and are therefore abstract, we'll get to practical, Android-based examples next.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;b&gt;Android App Classes&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If you've already started developing Android apps you will have created classes, although some of them may have a different structure to the example above. The Android platform does certain things slightly differently to the typical Java application, but the same patterns apply.&lt;br /&gt;
&lt;br /&gt;
Your initial Android projects will likely have some Activity classes in them. Unlike a standard Java class, an Activity class is instantiated by the system when your code creates and starts an Intent object, rather than by using the "new" keyword as in the example above. To dictate what should happen when an Activity class is instantiated, you add code to the "onCreate" method rather than a constructor.&lt;br /&gt;
&lt;br /&gt;
You can create standard Java classes to handle specific processing areas within your apps, as well as using the Android classes. When your apps use classes within the Android platform, such as the Activity class, they use inheritance.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;b&gt;Inheritance&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If you have any existing Android projects in which you have Activity classes, you have already used inheritance. The class declaration for an Activity starts like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public class HelpSection extends Activity&lt;/pre&gt;&lt;br /&gt;
The class name will vary for your own Activities. The phrase "extends Activity" means that the class is inheriting from the Android Activity class. When a Java class extends another class, it inherits the methods of that class. The parent class being extended is referred to as the superclass, with the extending class known as the subclass. The following sample code demonstrates extending the Worker class above:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public class Administrator extends Worker {

 public Administrator(String adminName) {
  super(adminName);
 }
 
}
&lt;/pre&gt;&lt;br /&gt;
The constructor method in the subclass calls the constructor for the superclass. This class can provide additional methods and variables that are specific to its own area of responsibility. Inheritance is essentially a way to re-use code, with extending classes able to make use of existing resources within an application or within the Java and Android platforms.&lt;br /&gt;
&lt;br /&gt;
By extending the Android classes, your own classes inherit their functionality, saving you from having to implement certain details. For example, the Activity superclass handles the details of presenting a user interface screen to your users.&lt;br /&gt;
&lt;br /&gt;
The inheritance structures you are most likely to use at first are for user interface elements, but you can extend any existing Java and Android classes you find useful. This is a key feature of Object Oriented development, and allows you to focus your energy on the aspects of your own projects that make them unique.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;Overriding&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
An inheriting class can provide a dedicated implementation of any method in the superclass it is extending. If you provide a method in a subclass that is also in the superclass, this new version of the method overrides the superclass version. If you want to carry out the same processing as the superclass method and then additional processing of your own, you can begin the method implementation by first calling the implementation in the superclass as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public void doSomething() {
super.doSomething();
//additional processing
}
&lt;/pre&gt;&lt;br /&gt;
&lt;hr /&gt;&lt;b&gt;Interfaces&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
As we have seen, with class declarations, you define the behaviour of object instances. Interfaces are another way to influence object behaviour. An interface in Java is like a contract, specifying a series of methods that implementing classes must provide.&lt;br /&gt;
&lt;br /&gt;
Interface declarations list method signatures, each signature including the method name plus an indication of the parameters and return type. Interfaces do not provide implementation details for the methods, so the implementing classes need to do this. In other words, an interface dictates what the class will do, and the class declaration describes how it will do it.&lt;br /&gt;
&lt;br /&gt;
Again, if you have already started with Android you may have implemented some interfaces. The Android platform provides a range of interfaces for delivering user interaction, such as the "OnClickListener" interface. You can indicate that a class will implement an interface using the following syntax:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public class HelpSection extends Activity implements OnClickListener
&lt;/pre&gt;&lt;br /&gt;
If you are programming in an Integrated Development Environment such as Eclipse, the program will display error messages when you initially add this code. This is one of the most useful aspects of an IDE, as it reminds you to provide the interface methods, and will continue to show errors until you do.&lt;br /&gt;
&lt;br /&gt;
For the "OnClickListener" interface, your class must provide the "onClick" method, responding to user interaction with your Activity. Implementing an interface is therefore making a commitment that your class will exhibit certain generic behaviours. It's up to you to decide exactly how your classes implement them.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;b&gt;Developing in Eclipse&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Eclipse is designed for developing Object Oriented projects, so it has a number of features you may find useful for your Android apps. The Type Hierarchy view helps to visualise projects with reference to the concepts we've gone over here. For example, if you have a class which is extending another class, you can see its hierarchy within your application, and within the platform as a whole.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-lVGbLLk7b60/TyhknnV0vHI/AAAAAAAAAE8/20z229smerw/s1600/type_hierarchy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-lVGbLLk7b60/TyhknnV0vHI/AAAAAAAAAE8/20z229smerw/s1600/type_hierarchy.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
To see the Type Hierarchy, open the view by choosing Window, Show View, Hierarchy. The new pane will appear within your Eclipse window. Choose an inheriting class in your application and right-click on a reference to the class name in one of your Java files, then choose Open Type Hierarchy. You should see the hierarchy presented within the new view. All classes in Java ultimately inherit from the class Object, so you will see it at the top of the hierarchy tree structure.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Through Object Oriented development, you can work with re-usable code components which preserve the ability to specialise in unique application areas. This is sometimes referred to as polymorphism. The model allows you to make use of a wealth of existing code resources within both the Java language and the Android platform itself.&lt;br /&gt;
&lt;br /&gt;
Regardless of your development background, learning the basics of Object Oriented development needn't be a difficult task, and can have a hugely positive impact on your Android projects.&lt;br /&gt;
&lt;br /&gt;
The OO model is often used by developers working in teams, who need to be able to use one another's code without having to understand the implementation details within any particular section. This idea of an application being made up of code excerpts, each of which has clearly defined behaviours, is the key one to understand, whether you're working with classes and interfaces from your own apps, from the Android platform or from the Java language itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8119365238245677514-3154100225619025631?l=androidthings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aMZ8EYOV3CTA19H27_s1Q3OZaVI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aMZ8EYOV3CTA19H27_s1Q3OZaVI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aMZ8EYOV3CTA19H27_s1Q3OZaVI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aMZ8EYOV3CTA19H27_s1Q3OZaVI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidThings/~4/V_UEBENazyc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/3154100225619025631/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://androidthings.blogspot.com/2012/01/object-oriented-concepts-for-android.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/3154100225619025631?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/3154100225619025631?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidThings/~3/V_UEBENazyc/object-oriented-concepts-for-android.html" title="Object Oriented Concepts for Android Development in Java" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-_7-7pVucyUE/TyhhlVHFBrI/AAAAAAAAAEs/Vw0f-6imkJ0/s72-c/android_oo_preview.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://androidthings.blogspot.com/2012/01/object-oriented-concepts-for-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EBSX07eyp7ImA9WhVTEEw.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514.post-2224868505228473978</id><published>2012-01-30T16:38:00.001Z</published><updated>2012-02-23T15:40:58.303Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-23T15:40:58.303Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tts" /><category scheme="http://www.blogger.com/atom/ns#" term="text to speech" /><title>Android Text To Speech (TTS) Basics</title><content type="html">When I originally attempted implementing TTS functionality in my apps I was yet again surprised by how few practical tutorials there were online. I wrote a detailed, practical one a while back for Mobiletuts+ which runs through a simple app with the Text To Speech engine functions: &lt;a href="http://mobile.tutsplus.com/tutorials/android/android-sdk-using-the-text-to-speech-engine/"&gt;Using the Text to Speech Engine&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
However, if you just want to know the basics so that you can get stuck into adding the functionality to create your own Text To Speech apps, here's what you need to do:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Import the TTS Classes&lt;/b&gt;&lt;br /&gt;
To make use of the Text To Speech API, you need to reference it in your code. Add these import statements to your chosen class for standard functionality - includes the TTS resources and others necessary for basic tasks:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.content.Intent;
import java.util.Locale;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Implement the OnInitListener Interface&lt;/b&gt;&lt;br /&gt;
When using the TTS functions you configure your speech functionality in the onInit method, so you need your class to implement this interface. Add "implements OnInitListener" to the class declaration in which you plan on providing TTS. The following sample code demonstrates:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public class MyLovelyClass extends Activity implements OnInitListener
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Check for User Data&lt;/b&gt;&lt;br /&gt;
Before you start making your apps speak you need to check that the user has the required resources on their device. Add the following instance variable at the top of your class declaration:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;private int DATA_CHECKING = 0;
&lt;/pre&gt;&lt;br /&gt;
Next add the data checking code to the section of your class that executes when it starts up. I.E. for a standard Java class put it in the constructor method, for an Activity class put it in "onCreate" and so on:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;//create an Intent
Intent checkData = new Intent();
//set it up to check for tts data
checkData.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
//start it so that it returns the result
startActivityForResult(checkData, DATA_CHECKING);
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;Create a TTS Object&lt;/b&gt;&lt;br /&gt;
So that you can access the Text To Speech object throughout the class, declare it as an instance variable at the top:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;private TextToSpeech niceTTS;
&lt;/pre&gt;&lt;br /&gt;
When the app receives the result of your data checking operation, the onActivityResult method will execute, so add the code to instantiate the TTS in there:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 //do they have the data
 if (requestCode == DATA_CHECKING) {
 //yep - go ahead and instantiate
 if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
  niceTTS = new TextToSpeech(this, this);
 //no data, prompt to install it
 else {
  Intent promptInstall = new Intent();
  promptInstall.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
  startActivity(promptInstall);
  }
 }
}
&lt;/pre&gt;&lt;br /&gt;
Most users do have the TTS data now but this code takes care of those cases where they don't.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Provide the onInit Method&lt;/b&gt;&lt;br /&gt;
Your class is extending the OnInitListener interface so that you can set the TTS object up to function when it initialises. Add the method as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public void onInit(int initStatus) {
 if (initStatus == TextToSpeech.SUCCESS) {
  niceTTS.setLanguage(Locale.UK);
 }
}
&lt;/pre&gt;&lt;br /&gt;
This is the basic process for choosing UK English but the engine offers a wide range of possibilities.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Say It Loud&lt;/b&gt;&lt;br /&gt;
Now all you need to do is speak. Add this code wherever you want the speech to occur, passing a text string to speak:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;String myWords = "I love you";
niceTTS.speak(myWords, TextToSpeech.QUEUE_FLUSH, null);
&lt;/pre&gt;&lt;br /&gt;
This instructs the app to speak straight away, but you can optionally choose to add it to a queue, waiting for any existing speech to finish. Again, there are lots of options to explore.&lt;br /&gt;
&lt;br /&gt;
These are the basics of creating a TTS app on Android, but as mentioned above there are plenty of areas in which you can tailor and adapt the functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;If you're having trouble getting this to work in your apps, have a go at my other tutorial first, then try doing it with your own apps again: &lt;a href="http://mobile.tutsplus.com/tutorials/android/android-sdk-using-the-text-to-speech-engine/"&gt;Using the Text to Speech Engine&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Other resources:&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://developer.android.com/resources/articles/tts.html"&gt;Android Developer Guide: Using Text-to-Speech&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://developer.android.com/reference/android/speech/tts/TextToSpeech.html"&gt;Android Developer Reference: public class TextToSpeech&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8119365238245677514-2224868505228473978?l=androidthings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n5SHJQOAig-vN5fLmRiMevmVZwg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n5SHJQOAig-vN5fLmRiMevmVZwg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n5SHJQOAig-vN5fLmRiMevmVZwg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n5SHJQOAig-vN5fLmRiMevmVZwg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidThings/~4/UcgBlWA_4kQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/2224868505228473978/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://androidthings.blogspot.com/2012/01/android-text-to-speech-tts-basics.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/2224868505228473978?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/2224868505228473978?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidThings/~3/UcgBlWA_4kQ/android-text-to-speech-tts-basics.html" title="Android Text To Speech (TTS) Basics" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://androidthings.blogspot.com/2012/01/android-text-to-speech-tts-basics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MNSXw4fSp7ImA9WhVTEEw.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514.post-168722081938180466</id><published>2011-10-09T20:25:00.008+01:00</published><updated>2012-02-23T15:38:18.235Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-23T15:38:18.235Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="share button" /><category scheme="http://www.blogger.com/atom/ns#" term="send intent" /><category scheme="http://www.blogger.com/atom/ns#" term="chooser list" /><title>Adding a Share Button to Your Android Apps</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-bAsC3PPIYng/TrFoT6NHAsI/AAAAAAAAAEA/JJHUEe4La1Y/s1600/sharebtn.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-bAsC3PPIYng/TrFoT6NHAsI/AAAAAAAAAEA/JJHUEe4La1Y/s1600/sharebtn.png" /&gt;&lt;/a&gt; &lt;a href="http://4.bp.blogspot.com/-gn8nnLC70Xc/TrFoY1GxKtI/AAAAAAAAAEI/6UDPHv-Zxv8/s1600/sharelist.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://4.bp.blogspot.com/-gn8nnLC70Xc/TrFoY1GxKtI/AAAAAAAAAEI/6UDPHv-Zxv8/s320/sharelist.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;i&gt;The share button and list for one of my apps.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I recently approached what I assumed would be the simple task of adding a share button to &lt;a href="https://market.android.com/developer?pub=BeNormal"&gt;my Android apps&lt;/a&gt;. While the implementation is indeed simple, I was disappointed, yet again, by the lack of easily digestible guidance online, for what must be a very common task.&lt;br /&gt;
&lt;br /&gt;
Anyway, for anyone in the same boat, here's what I learned. For my purposes I only needed a very basic implementation, so it may not be sufficient for your own applications - it should give you the generic outline in any case.&lt;i&gt; For more specific guidance see my Mobiletuts+ tutorial - &lt;a href="http://mobile.tutsplus.com/tutorials/android/android-sdk-implement-a-share-intent/"&gt;Android SDK: Implement a Share Inten&lt;/a&gt;&lt;a href="http://mobile.tutsplus.com/tutorials/android/android-sdk-implement-a-share-intent/"&gt;t&lt;/a&gt; on &lt;/i&gt;&lt;i&gt;the &lt;/i&gt;&lt;i&gt;subject.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Share Intent&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
To create a share button you have to start a new Intent, passing it the SEND action. When the Activity for your SEND Intent starts, it will present the user with a list of possible channels to share the content through. What each user sees will depend on their own device setup, but it will typically include email, Gmail, Twitter, Facebook, text messaging etc. You will almost certainly have seen the share button in action as an Android user, for example in the browser program.&lt;br /&gt;
&lt;br /&gt;
Here is a basic outline of the code involved in instantiating a share button with the chooser list:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;//create the send intent
Intent shareIntent = 
 new Intent(android.content.Intent.ACTION_SEND);

//set the type
shareIntent.setType("text/plain");

//add a subject
shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
 "Insert Subject Here");

//build the body of the message to be shared
String shareMessage = "Insert message body here.";

//add the message
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
 shareMessage);

//start the chooser for sharing
startActivity(Intent.createChooser(shareIntent, 
 "Insert share chooser title here"));

&lt;/pre&gt;&lt;br /&gt;
The code first creates an Intent with SEND as the action. The "setType" method allows you to choose a MIME type for the content being shared, such as plain text or HTML. The code here features two calls to the "putExtra" method, through which you can set various elements of your share item, subject and text content in this case. Finally, the code starts the Activity using the Intent sharing settings indicated, instructing Android to create a chooser list allowing users to pick a sharing medium.&lt;br /&gt;
&lt;br /&gt;
There are other options within the sharing implementation, and you can obviously alter the parameters, method calls etc. to suit your own apps. What options you pick really depends on what you're sharing.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Considerations&lt;/b&gt;&lt;/span&gt;&lt;/u&gt; &lt;br /&gt;
&lt;br /&gt;
Bear in mind the fact that certain aspects of what you set using "putExtra" will be irrelevant for certain sharing channels. For example, if you choose to set a title like I have, it won't appear if the user opts to share using a text message. Also, if you want your users to share using Twitter, remember the 140 character limit.&lt;br /&gt;
&lt;br /&gt;
It's actually tricky to create sharing content that will suit all of the possible messaging services. If you don't want users to choose from the list of options you can bypass that part of the process, but that means you have to create a button or other user control for each messaging service you want users to choose from.&lt;br /&gt;
&lt;br /&gt;
As well as providing the highest level of choice for your users, in my view it's best to use familiar interaction where possible, and Android users are by now accustomed to the sharing chooser list. The downside is that you need to keep your sharing content pretty simple and standard.&lt;br /&gt;
&lt;br /&gt;
For my apps, I was tempted to include a Twitter hashtag in the share content, since &lt;a href="http://twitter.com/BrainDeadAir"&gt;it suits my content&lt;/a&gt;, but clearly it would be redundant for users sharing through services other than Twitter. Obviously users can edit the content before going ahead and sending it, but it would be poor practice to include a load of guff the user has to delete each time they want to share something. &lt;i&gt;I've seen some apps in which the developer has crammed a load of publicity text including links etc. in with their sharing content - tempting, but not to be recommended from a usability point of view.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Hope that proved useful to some people, here are some related resources:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.android.com/guide/practices/ui_guidelines/activity_task_design.html"&gt;Android Developers: Activity and Task Design Guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/reference/android/content/Intent.html"&gt;Android Developers: Intent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mobile.tutsplus.com/tutorials/android/android-email-intent/"&gt;Mobile tuts+: Enabling Users to Send Email From Your Android Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Please feel free to add any of your own tips for sharing in Android apps.&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Update November 2011&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
I've written a tutorial on share buttons for Mobiletuts+ &lt;a href="http://mobile.tutsplus.com/tutorials/android/android-sdk-implement-a-share-intent/"&gt;Android SDK: Implement a Share Intent&lt;/a&gt; which goes into more detail.&lt;b&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8119365238245677514-168722081938180466?l=androidthings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X8NHlJGJttxOxLOQpr-l4qIGBv4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X8NHlJGJttxOxLOQpr-l4qIGBv4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X8NHlJGJttxOxLOQpr-l4qIGBv4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X8NHlJGJttxOxLOQpr-l4qIGBv4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidThings/~4/SRZN5_5iR7k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/168722081938180466/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://androidthings.blogspot.com/2011/10/adding-share-button-to-your-android.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/168722081938180466?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/168722081938180466?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidThings/~3/SRZN5_5iR7k/adding-share-button-to-your-android.html" title="Adding a Share Button to Your Android Apps" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-bAsC3PPIYng/TrFoT6NHAsI/AAAAAAAAAEA/JJHUEe4La1Y/s72-c/sharebtn.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://androidthings.blogspot.com/2011/10/adding-share-button-to-your-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMHQXc_eip7ImA9WhdUFEw.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514.post-5785727841169375181</id><published>2011-04-29T00:39:00.008+01:00</published><updated>2011-09-30T22:17:10.942+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-30T22:17:10.942+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="market comments" /><category scheme="http://www.blogger.com/atom/ns#" term="trolling" /><category scheme="http://www.blogger.com/atom/ns#" term="trolls" /><category scheme="http://www.blogger.com/atom/ns#" term="market ratings" /><title>Android Market Comments and Ratings</title><content type="html">&lt;i&gt;As with all Internet and digital discourse, trolls seem to be a part of reality in the Android Market. &lt;/i&gt;&lt;i&gt;Some thoughts on the Android Market comments and ratings I've received to date. &lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
My Android apps are pretty niche, and I'm fully aware that they will only ever appeal to a small number of geeks like me. In the future I intend to develop apps that are more likely to be useful to a wide variety of users, but the apps I have on the Market at the moment are pretty odd.&lt;br /&gt;
&lt;br /&gt;
However narrow their appeal, I've always tried to indicate very clearly what my apps do in the descriptions within their Market listings. I naively assumed that people who had no interest in the functionality my apps provide would not download them in the first place, but this appears to have been a mistaken assumption. Lots of my reviews seem to be from people who have absolutely no interest in what my apps do (which is clearly indicated in the descriptions) but who have for some reason downloaded them and subsequently given them a poor review.&lt;br /&gt;
&lt;br /&gt;
While I've always been aware that a certain element of nastiness is standard within any Internet based review system, and know all about trolls and trolling, I must admit I've found my own feedback a little demoralising at times.&lt;br /&gt;
&lt;br /&gt;
Here are a few choice 1 star reviews (the minimum possible rating) I've received for my &lt;a href="https://market.android.com/details?id=info.benormal.nonsense&amp;amp;feature=search_result"&gt;Nonsense&lt;/a&gt; app, which is free by the way:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;"Does what it says. However its nonsense."&lt;/li&gt;
&lt;li&gt;"Does what it says...NONSENSE!!!"&lt;/li&gt;
&lt;li&gt;"Boring, tis nonsense but not funny at all"&lt;/li&gt;
&lt;li&gt;"this game sucks!" &lt;i&gt;//nb the app is not meant to be a game&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;"Stinks!!!!"&lt;/li&gt;
&lt;li&gt;"This the dummiest crap ever!!?? It is not wat I wanted."&lt;/li&gt;
&lt;li&gt;"Stupid.. don't download"&lt;/li&gt;
&lt;li&gt;"Gay!"&lt;/li&gt;
&lt;li&gt;"Not amusing at all."&lt;/li&gt;
&lt;li&gt;"Wow...waste of 4 sec. Of my life."&lt;/li&gt;
&lt;li&gt;"Laaaaaame! Don't do it"&lt;/li&gt;
&lt;li&gt;"Dumb...Uninstalled."&lt;/li&gt;
&lt;li&gt;"i agree this is stupid and pointless"&lt;/li&gt;
&lt;li&gt;"Crap...don't waste ur time downloading.... lame"&lt;/li&gt;
&lt;li&gt;"Horrible, very stupid"&lt;/li&gt;
&lt;li&gt;"Its stupid!!"&lt;/li&gt;
&lt;li&gt;"Super lame."&lt;/li&gt;
&lt;li&gt;"Worst app EVER!"&lt;/li&gt;
&lt;li&gt;"The shittiest app I've ever seen"&lt;/li&gt;
&lt;li&gt;"Boring pointless etc worst app ever do not download this..."&lt;/li&gt;
&lt;li&gt;"Rlly retarded"&lt;/li&gt;
&lt;li&gt;"Dumb!! Nothing good at all about this.."&lt;/li&gt;
&lt;li&gt;"Pointless and stupid."&lt;/li&gt;
&lt;li&gt;"This sucked! Waste of time!"&lt;/li&gt;
&lt;li&gt;"Sucks"&lt;/li&gt;
&lt;li&gt;"Terrible."&lt;/li&gt;
&lt;li&gt;"I hate it"&lt;/li&gt;
&lt;li&gt;"This is the most stupid thing ever don't get this!!"&lt;/li&gt;
&lt;li&gt;"Why anyone would want this is beyond me!"&lt;/li&gt;
&lt;li&gt;"This thing is almost as fun as going in the street and smashing your balls in with a hammer. This comment is officially better than this app"&lt;/li&gt;
&lt;li&gt;"This sucks and it makes NO sense at all! Removing app" &lt;i&gt;//nb the app is called nonsense&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;"This was a waist of time and space. I mean there are some bad aps out there but this one is the worse of all"&lt;/li&gt;
&lt;li&gt;"Zzzzzzzzz...boring on ov de worst games ever"&lt;/li&gt;
&lt;li&gt;"Its F***ING stupid"&lt;/li&gt;
&lt;li&gt;"Pointless...don't get it uninstalled. How do u even play this game?"&lt;/li&gt;
&lt;li&gt;"Title is accurate. Don't waste time downloading this."&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Just to explain, all the app really does is generate nonsense sentences. There's a bit of linguistic geekery involved in that the structures are grammatical and meaningless, but essentially it's just a bit of fun. The free version was my initial foray into Android development but in more recent months I've created a couple of slightly more sophisticated paid versions (including a sweary one).&lt;br /&gt;
&lt;br /&gt;
Anyway, from my point of view what's happened here is that I've spent a significant amount of my time producing and releasing something people can have for free if they happen to want it, and the overwhelming majority of those who have added a comment have responded with anger and some pretty vicious contempt, while in some cases acknowledging the fact that the app is exactly as described. Is it me or is there something wrong here?&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;An analogy: you see a stand in the street with the words "free chocolate ice cream" displayed above it, you go up and get some, eat a mouthful, spit it out and then start shouting about the fact that you hate chocolate ice cream...&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
I do realise a certain amount of unfettered nastiness is generally inevitable in the context of digital communications, you only need to look at the comments section on any website to see that. However, as a developer basically creating trivial little apps for fun in my spare time, it does take the shine off things somewhat.&lt;br /&gt;
&lt;br /&gt;
To be fair, some of the comments I've had have been really productive and encouraging, and some of them have actually responded to the idiotic, nasty ones. I suspect some of the more helpful comments are perhaps from other developers, so I now make a point of putting positive comments on any apps I use that seem to be receiving a similar level of unwarranted aggression. However, my apps seem to have attracted this extreme negativity in the overwhelming majority of total feedback.&lt;br /&gt;
&lt;br /&gt;
Anyway, to finally get to the point, I've become aware recently that I, and I think most Internet users, just accept this nastiness as a necessary evil. However, I received an email the other day which chimed with some of what I've read in the press in the last while, from an organisation called &lt;a href="http://civilinationnews.org/"&gt;CiviliNation&lt;/a&gt; dedicated to campaigning against online bullying and the general lack of civility in digital discourse, and it got me questioning some of what I've accepted.&lt;br /&gt;
&lt;br /&gt;
It does seem that the tide may be turning slightly and that the days of totally unfettered bile online are probably numbered, in certain contexts anyway. While one of the great things about Internet communication is the lack of censorship, I don't think it follows from that that the normal expectations we have when interacting with people should not apply to digital communications also.&lt;br /&gt;
&lt;br /&gt;
The reality is that bullying has a very serious impact on some people, as the never-ending stream of stories about people announcing planned suicides on social networks demonstrates comprehensively. While this is the extreme end of the issue, I think the time has now come for us to have higher expectations of online behaviour.&lt;br /&gt;
&lt;br /&gt;
Ultimately the problem lies with a lack of responsibility, but the difficulty is going to lie in making people behave in a more civil way while still preserving a degree of anonymity. How we're going to improve the situation I really don't know, but a healthier breed of online discourse would surely be better for everyone involved.&lt;br /&gt;
&lt;br /&gt;
Here's some related content:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://androinica.com/2010/09/5-rules-of-android-market-comment-etiquette/"&gt;Andronica - 5 Rules of Android Market Comment Etiquette&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apprssd.com/2011/03/21/android-market-comments-rating-system/"&gt;AppRSSd - Android Market Comments &amp;amp; Rating System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobilecrunch.com/2008/12/12/best-of-stupid-android-market-comments-by-slightly-stupid-people/"&gt;MobileCrunch - Best of: Stupid Android Market comments by slightly stupid people&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nytimes.com/2008/08/03/magazine/03trolls-t.html"&gt;The New York Times - The Trolls Among Us&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.newscientist.com/blog/technology/2007/11/dont-flame-me-bro.html"&gt;New Scientist - Don't flame me, bro'&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.guardian.co.uk/technology/2010/dec/12/aleks-krotoski-hate-internet-racism"&gt;Guardian - Hate and the internet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.guardian.co.uk/theguardian/2009/nov/03/stephen-fry-twitter"&gt;Guardian - Stephen Fry's Twitter wobble: I know just how he feels&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Update July 2011:&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
A couple of interesting Guardian articles on related topics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.guardian.co.uk/technology/2011/jul/24/internet-anonymity-trolling-tim-adams"&gt;How The Internet Created An Age Of Rage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.guardian.co.uk/commentisfree/2011/jun/06/spotify-problem-getting-people-to-pay"&gt;If The Internet Gave Free Back Rubs...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
The first one is a fascinating look at the history and psychology of "trolling" with reference to anonymity and the second is a Charlie Brooker article from last month on Spotify, not exactly the same topic but touches on some related issues.&lt;br /&gt;
&lt;br /&gt;
And a few more:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt; &lt;a href="http://www.readwriteweb.com/archives/open_thread_on_trolls_anonymity_making_the_interne.php"&gt;Read Write Web - On Trolls, Anonymity &amp;amp; Making the Internet a Better Place&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://thenextweb.com/uk/2010/01/14/anonymous-troll-commenter-revealed/"&gt;The Next Web - When an Anonymous Troll is Revealed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.nytimes.com/2011/04/24/magazine/mag-24lede-t.html"&gt;New York Times - How to Unmask the Internet’s Vilest Characters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.nytimes.com/2010/11/30/opinion/30zhuo.html"&gt;New York Times - Where Anonymity Breeds Contempt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.techspot.com/news/44394-study-internet-trolls-are-drunk-with-power.html"&gt;TechSpot - Internet trolls are drunk with power&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;u&gt;&lt;b&gt;Update September 2011:&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
Interesting piece in the Guardian pointing out the fact that as with any social problem there's no easy fix and that the reasons for trolling are complex:&lt;br /&gt;
&lt;a href="http://www.guardian.co.uk/commentisfree/2011/sep/14/troll-sean-duffy-internet"&gt;Guardian: All you trolls out there - come out and explain yourself&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The issue is certainly a complex one, and it seems there isn't even a  clear definition of trolling at this stage, in fact it probably refers  to a range of distinct activities with different characteristics and  effects. The days of unfettered Internet trolls definitely look to be coming to an end,  but there may well be negative consequences for Internet discourse too,  i.e. the inevitable reduction in privacy.&lt;br /&gt;
&lt;br /&gt;
Here's another incredibly depressing tale of extreme trolling:&lt;br /&gt;
&lt;a href="http://skepchick.org/2011/09/mom-dont-read-this/"&gt;Skepchick - Mom, Don't Read This&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Something has to change, surely...&lt;br /&gt;
&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8119365238245677514-5785727841169375181?l=androidthings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SRDW99qr0fp6qIsaSwwNsXmqQLI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SRDW99qr0fp6qIsaSwwNsXmqQLI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SRDW99qr0fp6qIsaSwwNsXmqQLI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SRDW99qr0fp6qIsaSwwNsXmqQLI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidThings/~4/-HOR-JtvYnM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/5785727841169375181/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://androidthings.blogspot.com/2011/04/android-market-comments-and-ratings.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/5785727841169375181?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/5785727841169375181?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidThings/~3/-HOR-JtvYnM/android-market-comments-and-ratings.html" title="Android Market Comments and Ratings" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://androidthings.blogspot.com/2011/04/android-market-comments-and-ratings.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGSHs4fyp7ImA9WhVTEEw.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514.post-6986233922743802696</id><published>2011-04-17T23:25:00.005+01:00</published><updated>2012-02-23T15:37:09.537Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-23T15:37:09.537Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android developer resources" /><category scheme="http://www.blogger.com/atom/ns#" term="android developer guides" /><category scheme="http://www.blogger.com/atom/ns#" term="android tutorial sites" /><category scheme="http://www.blogger.com/atom/ns#" term="android developer tutorials" /><title>Android Developer Tutorial Websites</title><content type="html">I've been pretty disappointed by the lack of Android developer tutorials online and have often spent ages trying to find out how to do something that I thought would pop up instantly after a quick Google.&lt;br /&gt;
&lt;br /&gt;
Learning how to program for Android can be quite a task depending on your own background, so access to decent educational material is vital. From Android widget development to standard Android software app development and getting to grips with the Android SDK, there's potentially a lot to learn.&lt;br /&gt;
&lt;br /&gt;
Anyway, here are some of the better sources for Android developer tutorials I've come across. If I find any more I'll add them to the list, feel free to add comments with any you've discovered yourself!&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://developer.android.com/resources/browser.html?tag=tutorial" linkindex="23"&gt;Android Developer Resources - Tutorials&lt;/a&gt;&lt;br /&gt;
OK, it may seem obvious but there are so many different ways to browse the official developer guide for Android that I find it useful to have several different parts of it bookmarked...&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.vogella.de/android.html"&gt;Vogella - Android Tutorials&lt;/a&gt;&lt;br /&gt;
Lars Vogel's site is one I find myself returning to again and again. The tutorials are detailed and the techniques always best practice. Thoroughly recommended. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://www.ibm.com/developerworks/mydeveloperworks/bookmarks/html?tag=android&amp;amp;base=http://www.ibm.com/developerworks/library/&amp;amp;dwapp=Technical%20library&amp;amp;lang=en" linkindex="24"&gt;IBM DeveloperWorks&lt;/a&gt;&lt;br /&gt;
The IBM site has loads of useful resources for many different types of development, and Android is no exception.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.anddev.org/android-tutorials-with-source-code-f39/" linkindex="25"&gt;anddev.org&lt;/a&gt;&lt;br /&gt;
The anddev.org site is a must-bookmark for anyone getting started with Android development in my view. I've found information here on numerous occasions that I couldn't find anywhere else.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.helloandroid.com/tutorials" linkindex="26"&gt;Hello Android&lt;/a&gt;&lt;br /&gt;
It's a bit of an arbitrary mix but some of the tutorials on the Hello Android site are really useful.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://mobile.tutsplus.com/?s=android" linkindex="27"&gt;Mobiletuts+&lt;/a&gt;&lt;br /&gt;
The tutorials on the Tuts+ network all tend to be very detailed and in-depth, and the mobile site has quite a few good Android guides.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.curious-creature.org/category/android/" linkindex="28"&gt;Romain Guy&lt;/a&gt;&lt;br /&gt;
This is a personal blog by an Android software engineer and has a really good range of Android developer tutorials on different topics.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.androidguys.com/category/tips-tools/" linkindex="29"&gt;Android Guys&lt;/a&gt;&lt;br /&gt;
A lot of the articles in the Tips and Tools section of Android Guys are aimed at users rather than developers, but there are a few development topics in there.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.talkandroid.com/category/android-development/" linkindex="30"&gt;Talk Android&lt;/a&gt;&lt;br /&gt;
Mostly news-focused but with some guides, Talk Android is always worth a look.&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;&lt;br /&gt;
Finally, here are links to some of mine on different sites:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://coding.smashingmagazine.com/2011/11/04/getting-the-best-out-of-eclipse-for-android-development/"&gt;Smashing Magazine - Getting Best Use Out of Eclipse for Android Development&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://mobile.tutsplus.com/author/sue-smith/"&gt;Mobiletuts: Various&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://marketplace.tutsplus.com/user/benormal"&gt;Tuts+ Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;i&gt;That's it for the moment, if I remember or discover any more I'll add them.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8119365238245677514-6986233922743802696?l=androidthings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SDPClszgOIf_V_TJDrGaj_2DKDo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SDPClszgOIf_V_TJDrGaj_2DKDo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SDPClszgOIf_V_TJDrGaj_2DKDo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SDPClszgOIf_V_TJDrGaj_2DKDo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidThings/~4/2Z5DhAi1n9g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/6986233922743802696/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://androidthings.blogspot.com/2011/04/android-developer-tutorial-websites.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/6986233922743802696?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/6986233922743802696?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidThings/~3/2Z5DhAi1n9g/android-developer-tutorial-websites.html" title="Android Developer Tutorial Websites" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://androidthings.blogspot.com/2011/04/android-developer-tutorial-websites.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGSX48eCp7ImA9WhVTEEw.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514.post-2030505595293585076</id><published>2011-03-03T22:50:00.005Z</published><updated>2012-02-23T15:33:48.070Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-23T15:33:48.070Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android app stores" /><category scheme="http://www.blogger.com/atom/ns#" term="android marketplaces" /><category scheme="http://www.blogger.com/atom/ns#" term="android directories" /><category scheme="http://www.blogger.com/atom/ns#" term="android listings" /><title>Android Marketplaces and Directories</title><content type="html">There are already a load of places people can download or access your Android applications, other than the official Market. If you're a developer, you'll naturally want to explore as many places to sell and list your app as possible.&lt;br /&gt;
&lt;br /&gt;
Some of the sites and applications describing themselves as marketplaces simply link into the Android Market, but on some of them you can upload and sell your apps directly. In this article I'll run through some of the main Android application stores I've found, focusing on those sites where you can distribute Android software, i.e. upload your Android APK files and sell them.&lt;br /&gt;
&lt;br /&gt;
On the directories, you can sometimes sign up for an account and alter the details listed for your apps. Here are some I've come across, I haven't tried them all so can't guarantee they're any good. Also, some of these are new services and are just starting out, so they don't always have much of a user base yet.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Make sure you check out the terms, FAQs etc on any service before taking the time to sign up, many of them have high minimum payouts and restrictions on where developers can be resident etc.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.androidzoom.com/" linkindex="52"&gt;AndroidZoom&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
AndroidZoom  is an interface to the Android Market. As a developer you can link your  app listings to your Google account, insert additional information  about your apps and access additional data, just click the "I'm the  developer" link on any of your app listings.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://andappstore.com/AndroidApplications/" linkindex="53"&gt;AndAppStore&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
AndAppStore  is a an Android app store aimed at catering to a wider variety of users  than the mainstream market. As a user you need to install the app to  access your downloads but can shop for them on a computer if you like.&lt;br /&gt;
&lt;a href="http://andappstore.com/AndroidApplications/register.jsp" linkindex="54"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://slideme.org/" linkindex="55"&gt;SlideME&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
SlideME is a community based marketplace for Android apps.&lt;br /&gt;
&lt;a href="https://slideme.org/en/user/register" linkindex="56"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.androidpit.com/" linkindex="57"&gt;AndroidPIT&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
AndroidPIT combines an app store with articles and news etc about Android.&lt;br /&gt;
&lt;a href="http://www.androidpit.com/en/android/registration/form?dev=1" linkindex="58"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://andspot.com/index.cfm" linkindex="59"&gt;AndSpot&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
AndSpot is a new social networking based app store offering increased exposure and data.&lt;br /&gt;
&lt;a href="http://www.workinbeta.com/register.cfm" linkindex="60"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://appslib.com/applications/index.html" linkindex="61"&gt;AppsLib&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
ApplsLib is an alternative marketplace for tablets running Android. To use the service as a customer you need to install the AppsLib application.&lt;br /&gt;
&lt;a href="http://appslib.com/developers/create_account.html" linkindex="62"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.handango.com/" linkindex="63"&gt;Handango&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Handango is a major app store for platforms including Android, Blackberry, Windows Mobile, Symbian and Palm.&lt;br /&gt;
&lt;a href="http://www.handango.com/info/Partner.jsp?storeId=2218&amp;amp;deviceId=2433&amp;amp;platformId=80" linkindex="64"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://appoke.com/" linkindex="65"&gt;Appoke&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Appoke uses social networking to aid app sales.&lt;br /&gt;
&lt;a href="http://appoke.com/user/signup" linkindex="66"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.mobihand.com/" linkindex="67"&gt;MobiHand&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
MobiHand is an app store for Android, Blackberry, iPhone, Symbian, Windows Mobile and Palm.&lt;br /&gt;
&lt;a href="http://corporate.mobihand.com/developers_signup.asp" linkindex="68"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.getjar.com/" linkindex="69"&gt;GetJar&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
GetJar is an app store for many different handsets and platforms.&lt;br /&gt;
&lt;a href="http://developer.getjar.com/" linkindex="70"&gt;Developer signup&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.appstorehq.com/" linkindex="71"&gt;AppStoreHQ&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
AppStoreHQ covers Android, iPhone and iPad, linking to the Android market for downloads and sales. You can &lt;a href="http://www.appstorehq.com/developers/about" linkindex="72"&gt;claim your profile&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://androlicious.com/" linkindex="73"&gt;Androlicious&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
Androlicious is an interface for browsing the Android market, and you can link your apps to your Google account. You can &lt;a href="http://androlicious.com/home/contact" linkindex="74"&gt;submit apps&lt;/a&gt; and information to them via email.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://www.androlib.com/" linkindex="75"&gt;AndroLib&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
AndroLib is another listings site, but they have quite a lot of informative statistics and charts on the app pages. You can claim your apps by clicking the "I am the developer" link on the listings page.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;So that's it for now. There are also loads of app review sites, but that'll be for another post... If you know of any good Android market store sites please do add them in the comments.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Update October 2011&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt; &lt;/i&gt;In the short time since I wrote this post a load more marketplaces have started up and I have to admit I've totally lost track of them! One resource that may be useful for some developers is &lt;a href="http://www.appbackr.com/"&gt;appbackr&lt;/a&gt; which I've just heard about so know very little about. It provides an alternative way of funding your apps and handles the distribution side of things for you. &lt;i&gt;&lt;b&gt;If anyone has experience using the service please do comment on how well (or not) it's worked for you.&lt;/b&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8119365238245677514-2030505595293585076?l=androidthings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HC-r-CRvrMaEOvG4BvDyszvKJBk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HC-r-CRvrMaEOvG4BvDyszvKJBk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HC-r-CRvrMaEOvG4BvDyszvKJBk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HC-r-CRvrMaEOvG4BvDyszvKJBk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidThings/~4/PJA9NoQqFwI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/2030505595293585076/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://androidthings.blogspot.com/2011/03/android-marketplaces-and-directories.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/2030505595293585076?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/2030505595293585076?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidThings/~3/PJA9NoQqFwI/android-marketplaces-and-directories.html" title="Android Marketplaces and Directories" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://androidthings.blogspot.com/2011/03/android-marketplaces-and-directories.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cFRnc6fip7ImA9WhdbE08.&quot;"><id>tag:blogger.com,1999:blog-8119365238245677514.post-3512876601692050550</id><published>2011-02-24T20:14:00.004Z</published><updated>2011-10-11T10:23:37.916+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T10:23:37.916+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android basics" /><category scheme="http://www.blogger.com/atom/ns#" term="android activity" /><category scheme="http://www.blogger.com/atom/ns#" term="android getting started" /><title>Thinking About Android Development?</title><content type="html">I started Android development in 2009, although when I say "started" that's exactly what I mean. I learned the basics, released a &lt;a href="https://market.android.com/search?q=pub:BeNormal"&gt;really trivial free application&lt;/a&gt; and then did nothing else with Android for about a year and a half.&lt;br /&gt;
&lt;br /&gt;
Having started getting back into Android development since the end of 2010, I've been surprised by the still relatively small number of useful Android development resources online. For that reason I thought I'd start a blog and keep note of the things I learn or come across as I go along, in case any of it proves useful for anyone else. This is going to be pretty simple stuff aimed at developers like myself who are really just doing Android on a casual basis.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;Some initial thoughts about the Android development process:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Android development isn't what I expected it to be. My initial training was in Java programming for desktop applications, and I then got into Web and multimedia development (mainly so that I could work freelance). I've always loved Java development, and for that reason was excited by the possibility of getting paid to do it on a freelance basis.&lt;br /&gt;
&lt;br /&gt;
However, the Android development process bears more resemblance to Web development than the type of Java application development I was used to. This is probably good news for people who come from a Web background and want to get into Android. If, like me, your background has been more desktop-oriented, you might need to make a bit of a mental adjustment when you approach Android. I'd recommend reading up on the &lt;a href="http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle" linkindex="16"&gt;Android Activity Lifecycle&lt;/a&gt; before you get started, as this is the key concept to get to grips with when it comes to structuring your apps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8119365238245677514-3512876601692050550?l=androidthings.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/75doTULaX-G9Egc-33vRF-m21Z0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/75doTULaX-G9Egc-33vRF-m21Z0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/75doTULaX-G9Egc-33vRF-m21Z0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/75doTULaX-G9Egc-33vRF-m21Z0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/AndroidThings/~4/gs64CceiUEk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://androidthings.blogspot.com/feeds/3512876601692050550/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://androidthings.blogspot.com/2011/02/thinking-about-android-development.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/3512876601692050550?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8119365238245677514/posts/default/3512876601692050550?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AndroidThings/~3/gs64CceiUEk/thinking-about-android-development.html" title="Thinking About Android Development?" /><author><name>Brain Dead Air</name><uri>http://www.blogger.com/profile/08085981060976444149</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_ZIIeQp7q-0E/SaL6yHb6RII/AAAAAAAAAAg/IRgj-8DZdGI/S220/profileimg.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://androidthings.blogspot.com/2011/02/thinking-about-android-development.html</feedburner:origLink></entry></feed>

