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

<channel>
	<title>Androidkit.com &#187; Development</title>
	<atom:link href="http://www.androidkit.com/category/development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.androidkit.com</link>
	<description>Android Development Blog</description>
	<lastBuildDate>Mon, 08 Aug 2011 05:43:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Cloud to device messaging</title>
		<link>http://www.androidkit.com/cloud-to-device-messaging</link>
		<comments>http://www.androidkit.com/cloud-to-device-messaging#comments</comments>
		<pubDate>Mon, 09 May 2011 05:25:43 +0000</pubDate>
		<dc:creator>adit</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=309</guid>
		<description><![CDATA[<div><strong>C2DM</strong></div>
<p>Android Cloud to Device Messaging (C2DM) is a service that helps developers send data from servers to their applications on Android devices. The service provides a simple, lightweight mechanism that servers can use to tell mobile applications to contact&#8230;</p>]]></description>
			<content:encoded><![CDATA[<div><strong>C2DM</strong></div>
<p>Android Cloud to Device Messaging (C2DM) is a service that helps developers send data from servers to their applications on Android devices. The service provides a simple, lightweight mechanism that servers can use to tell mobile applications to contact the server directly, to fetch updated application or user data. The C2DM service handles all aspects of queuing of messages and delivery to the target application running on the target device.</p>
<p><strong>CHARACTERISTICS OF ANDROID CLOUD TO DEVICE MESSAGING (C2DM)</strong></p>
<p>Primary characteristics of C2DM are:</p>
<ol>
<li>It allows third-party application servers to send lightweight messages to their Android applications. The messaging service is not designed for sending a 	lot of user content via the messages. Rather, it should be used to 	tell the application that there is new data on the server, so that 	the application can fetch it.</li>
<li>An application on an Android 	device doesn’t need to be running to receive messages. The system 	will wake up the application via Intent broadcast when the the 	message arrives, as long as the application is set up with the 	proper broadcast receiver and permissions.</li>
<li>It uses an existing connection 	for Google services. This requires users to set up their Google 	account on their mobile devices.</li>
</ol>
<p><strong>ARCHITECTURAL OVERVIEW</strong></p>
<p>Cloud to Device Messaging includes key terms and concepts which can be classified in to two divisions. They are:</p>
<ol>
<li>Components</li>
<li>Credentials</li>
</ol>
<p><a href="http://www.androidkit.com/wp-content/uploads/2011/05/Screen-shot-2011-05-09-at-9.59.44-AM.png"><img class="alignnone size-medium wp-image-311" title="c2dm" src="http://www.androidkit.com/wp-content/uploads/2011/05/Screen-shot-2011-05-09-at-9.59.44-AM-300x138.png" alt="" width="300" height="138" /></a></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } --><span style="font-size: small;"><strong>Credentials</strong></span></p>
<p>The IDs and tokens that are used in different stages of C2DM to ensure that all parties have been authenticated, and that the message is going to the correct place.</p>
<p>Sender ID</p>
<p>An email account associated with the application&#8217;s developer. The sender ID is used in the registration process to identify a Android application that is permitted to send messages to the device. This ID is typically role-based rather than being a personal account—- for example, my-app@gmail.com</p>
<p>Application ID</p>
<p>It is the id of an application that is registering to receive messages. The application is identified by the package name from the manifest. This ensures that the messages are targeted to the correct application.</p>
<p>Registration ID</p>
<p>An ID issued by the C2DM servers to the Android application that allows it to receive messages. Once the application has the registration ID, it sends it to the third-party application server, which uses it to identify each device that has registered to receive messages for a given application. In other words, a registration ID is tied to a particular application running on a particular device. Google User Accountfor C2DM to work, the mobile device must include at least one logged in Google account.</p>
<p>Sender Auth Token</p>
<p>A ClientLoginAuth token that is saved on the third-party application server that gives the application server authorized access to Google services. The token is included in the header of POST requests that send messages.</p>
<p><strong>LIFE CYCLE OF CLOUD TO DEVICE MESSAGING</strong></p>
<p>Here are the primary processes involved in cloud-to-device messaging:</p>
<ol>
<li>Enabling C2DM: An Android application running on a mobile device registers to 	receive messages.</li>
<li>Sending a message: A third-party application server sends messages to the device.</li>
<li>Receiving a message: An Android application receives a message from a C2DM server.<br />
<a href="http://www.androidkit.com/wp-content/uploads/2011/05/Screen-shot-2011-05-09-at-9.59.58-AM.png"><img class="alignnone size-medium wp-image-312" title="c2dm" src="http://www.androidkit.com/wp-content/uploads/2011/05/Screen-shot-2011-05-09-at-9.59.58-AM-300x204.png" alt="" width="300" height="204" /></a></p>
<p><em>Enabling C2DM</em></p>
<p>Following are the sequence of events that occurs when an Android application running on a mobile device registers to receive messages:</p>
<ol>
<li>The first time the application 	needs to use the messaging service, it fires off a registration Intent to a C2DM server. </li>
</ol>
<p>This registration Intent  includes the sender ID (that is, the account authorized to send messages to the application, which is typically the email address of an account set up by the application&#8217;s developer), and the application ID.</p>
<ol>
<li>The C2DM server broadcasts a Intent which gives the application a registration ID.</li>
</ol>
<p>The application stores this ID for later use. Google may periodically refresh the registration ID, so the application is designed with the understanding that the REGISTRATIONntent may be called multiple times.</p>
<ol>
<li>To complete the registration, 	the application sends the registration ID to the application server. The application server typically stores the registration ID in a database. </li>
</ol>
<p>The registration ID lasts until the application explicitly unregisters itself, or until Google refreshes the registration ID for your application.</p>
<h4><em>Sending a Message</em></h4>
<p>For an application server to send a message, the following things must be in place:</p>
<ul>
<li>The application has a registration ID that allows it to receive messages for a particular device.</li>
<li>The Registration Id is stored at the Application Server.</li>
</ul>
<p>There is one more thing that needs to be in place for the application server to send messages: a Client Login authorization token. The Client Login token authorizes the application server to send messages to a particular Android application. An application server has one Client Login token for a particular 3rd party app, and multiple registration IDs. Each registration ID represents a particular device that has registered to use the messaging service for a particular 3rd party app.</p>
<p>Here is the sequence of events that occurs when the application server sends a message:</p>
<ol>
<li>The application server sends a message to C2DM servers.</li>
<li>Google queues and stores the message in case the device is inactive.</li>
<li>When the device is online, Google sends the message to the device.</li>
<li>On the device, the system broadcasts the message to the specified application via Intent broadcast with proper permissions, so that only the targeted 	application gets the message. This wakes the application up. The 	application does not need to be running beforehand to receive the message.</li>
<li>The application processes the 	message. If the application is doing non-trivial processing, you may want to grab a wake 	lock and do any processing in a Service.</li>
</ol>
<p>An application can unregister C2DM if it no longer wants to receive messages.</p>
<h4><em>Receiving Message</em></h4>
<p>This is the sequence of events that occurs when an Android application running on a mobile device receives a message:</p>
<ol>
<li>The system receives the incoming message and extracts the raw key/value pairs from the 	message payload.</li>
<li>The system passes the key/value pairs to the targeted Android application in a Intent as a set of extras.</li>
<li>The Android application 	extracts the raw data from the Intent by key and processes the data.</li>
</ol>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/cloud-to-device-messaging/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entering the next level &#8211; Android 3.0 SDK</title>
		<link>http://www.androidkit.com/entering-the-next-level-android-3-0-sdk</link>
		<comments>http://www.androidkit.com/entering-the-next-level-android-3-0-sdk#comments</comments>
		<pubDate>Mon, 28 Feb 2011 06:08:20 +0000</pubDate>
		<dc:creator>adit</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=295</guid>
		<description><![CDATA[<p>Google has recently announced the availability of the full SDK for Android 3.0. The updated SDK Tools component is now available for download from <a href="http://developer.android.com/sdk/tools-notes.html" target="_blank">here</a> .<br />
The Android 3.0 platform is designed specially to meet the unique&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Google has recently announced the availability of the full SDK for Android 3.0. The updated SDK Tools component is now available for download from <a href="http://developer.android.com/sdk/tools-notes.html" target="_blank">here</a> .<br />
The Android 3.0 platform is designed specially to meet the unique needs of applications on devices with larger screen sizes. Hence, there are some new and exciting things in Android 3 SDK, which should get developers excited about Android Development.</p>
<p><a href="http://www.androidkit.com/wp-content/uploads/2011/02/home_hero1_full.png"><img class="alignnone size-medium wp-image-297" title="home_hero1_full" src="http://www.androidkit.com/wp-content/uploads/2011/02/home_hero1_full-300x187.png" alt="" width="300" height="187" /></a><br />
Android 3.0 comes with a new UI designed from the ground up for tablets. With so many tablets in the market, UI is going to be a crucial factor to attract consumers to your device and the Google team has nailed it this time by providing an altogether new UI framework for developers, which will allow developers to create a richer, more interactive experience for users. We&#8217;re really excited about Activity fragments, which provide greater control of content and design flexibility.<br />
<a href="http://www.androidkit.com/wp-content/uploads/2011/02/contacts_full.png"><img class="alignnone size-medium wp-image-296" title="contacts_full" src="http://www.androidkit.com/wp-content/uploads/2011/02/contacts_full-300x187.png" alt="" width="300" height="187" /></a><br />
This will allow developers to come up with apps, which are more intuitive and engaging thereby increasing the overall user experience. The Activity fragment feature is supplemented by redesigned UI widgets which can now be used as remote views in application widgets displayed on the home screen. Other exciting features of Android 3.0 Platform include Persistent Action Bar and Richer Notifications. It&#8217;s really a neat idea to provide each application with its own instance of the Action Bar at the top of the screen. This will allow developers to expose more features of their applications to users in a familiar location.</p>
<p>We know that the notification mode is arguably better on Android devices as compared to iOS. And this just got better with Android 3 SDK, which includes new builder class thereby allowing developers to quickly create notifications that include large and small icons, a title, a priority flag, and any properties already available in previous versions. In Android, all notifications are neatly organized in an expandable menu. So, whenever any of these notifications appear, they are quickly displayed for some time in a small strip that always stays at the top of the screen. iOS 4 still follows pop-up notifications, which may occasionally interfere with whatever apps you’re running at the time.</p>
<p>There&#8217;s also some good news for Android Game Developers. Android 3.0 offers a new hardware-accelerated OpenGL renderer that gives a performance boost to many common graphics operations for applications running in the Android framework. And if this was not enough, Google has also included RenderScript with Android 3.0, which is a runtime 3D framework for accelerating graphics operations and data processing. It seems like we are going to see some really exciting games for Android in the near future!</p>
<p>Android 3.0 also includes some other smart features likes HTTP Live streaming and Digital Media file transfer. Overall, it&#8217;s an impressive release and we hope that the developers will make full use of it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/entering-the-next-level-android-3-0-sdk/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Push Notifications Tutorial (link)</title>
		<link>http://www.androidkit.com/android-push-notifications-tutorial-link</link>
		<comments>http://www.androidkit.com/android-push-notifications-tutorial-link#comments</comments>
		<pubDate>Tue, 12 Oct 2010 13:01:06 +0000</pubDate>
		<dc:creator>cary</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=265</guid>
		<description><![CDATA[<p><a href="http://blog.boxedice.com/2010/10/07/android-push-notifications-tutorial/">Boxed Ice</a>&#8216;s David Mytton posts a comprehensive tutorial for Android push notifications.  Worth a bookmark for budding Android developers.</p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.boxedice.com/2010/10/07/android-push-notifications-tutorial/">Boxed Ice</a>&#8216;s David Mytton posts a comprehensive tutorial for Android push notifications.  Worth a bookmark for budding Android developers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/android-push-notifications-tutorial-link/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Activity Classes Explained in Detail</title>
		<link>http://www.androidkit.com/android-activity-classes-explained-in-detail</link>
		<comments>http://www.androidkit.com/android-activity-classes-explained-in-detail#comments</comments>
		<pubDate>Wed, 29 Sep 2010 14:35:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Activity Classes]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[basic]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=258</guid>
		<description><![CDATA[<p>As a fledgling Android developer one of the first things you&#8217;ll need to do is get your head around Activity Classes. We can&#8217;t overstate the importance of this. A sharp, fluid understanding of how each class interacts with each other&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>As a fledgling Android developer one of the first things you&#8217;ll need to do is get your head around Activity Classes. We can&#8217;t overstate the importance of this. A sharp, fluid understanding of how each class interacts with each other class, and the end result for end users will not only speed along your project dev time, but open up new possibilities for your programming. So let&#8217;s take a look at these in some detail.</p>
<ul>
<li>onCreate(): This is called when the activity first starts up. You can use it to perform one-time initialization such as launching the user interface. onCreate() utilizes one parameter that is either null or state information previously saved by the onSaveInstanceState( ) method, discussed below.</li>
<li>onStart(): This indicates the activity is about to be displayed to the user.</li>
<li>onResume(): This is called when the user can start interacting with the activity. This is a good place to start animations and music.</li>
<li>onRestart(): If this is called, it indicates your activity is being redisplayed to the user from a stopped state.</li>
<li>onFreeze(): Allows you to save your current state when one activity is being paused and another one resumes to interact with the user. After being paused, the system may at any time need to stop (or even outright kill) your application in order to claim resources for the current foreground activity. If this should happen, the state you supply here will later be recalled with onCreate(), when the user starts a new instance of your activity.</li>
<li>onPause(): This runs when the activity is about to go into the background, usually because another activity has been launched in front of it. This is where you should save your program&#8217;s persistent state, such as a database record being edited.</li>
<li>onStop(): This is called when your activity is no longer visible to the user and it won&#8217;t be needed for a while. If memory is tight, onStop() may never be called (the system may simply terminate your process).</li>
<li>onDestroy(): This is called right before your activity is destroyed. If memory is tight, onDestroy( ) may never be called (the system may simply terminate your process).</li>
<li>onSaveInstanceState(Bundle): Android calls this method to allow the activity to save per-instance states, such as a cursor position within a text field. Usually you won&#8217;t need to override it because the default implementation saves the state for user interface controls automatically.</li>
<li>onRestoreInstanceState(Bundle): This is called when the activity is being reinitialized from a state previously saved by the onSaveInstanceState() method. The default implementation restores the state of your user interface.</li>
</ul>
<p>I hope this brings you up to speed on Android Activity Classes. Be sure to have a thorough look at the attached diagram below (click &#8211;&gt; full size) for a concrete overview of what we&#8217;ve been discussing here. The more familiar you are with Activity Classes and how and they affect the end user experience, the more successful your Android apps development will be.</p>
<p>If you have any questions or requests re: Android apps dev, drop us a line via <a href="http://www.sourcebits.com/contact">the contact form</a> at mothership Sourcebits and we&#8217;ll get back to you as soon as we can, perhaps even posting a tutorial here on these pages.</p>
<p>Best of luck,<br />
Sudhir N Kamath<br />
Sr. QA Engineer<br />
Sourcebits Technologies, Ltd.</p>
<div id="attachment_261" class="wp-caption aligncenter" style="width: 251px"><a href="http://www.androidkit.com/wp-content/uploads/2010/09/Android_Activity-Class_Lifecycle.png"><img class="size-medium wp-image-261" title="Android_Activity Class_Lifecycle" src="http://www.androidkit.com/wp-content/uploads/2010/09/Android_Activity-Class_Lifecycle-241x300.png" alt="" width="241" height="300" /></a><p class="wp-caption-text">Learn it, Live it, Reap ze glory.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/android-activity-classes-explained-in-detail/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Access Android Application Database from an Emulator</title>
		<link>http://www.androidkit.com/access-android-application-database-from-an-emulator</link>
		<comments>http://www.androidkit.com/access-android-application-database-from-an-emulator#comments</comments>
		<pubDate>Thu, 08 Jul 2010 15:11:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[command prompt]]></category>
		<category><![CDATA[database access]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[SQLite 3.0]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=249</guid>
		<description><![CDATA[<p>If you’re reading this then you probably already know that Android provides full support for <a href="http://www.sqlite.org/">SQLite</a> databases. So any database(s) you create will be accessible by name to any class in an Android application, just not outside the application.&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>If you’re reading this then you probably already know that Android provides full support for <a href="http://www.sqlite.org/">SQLite</a> databases. So any database(s) you create will be accessible by name to any class in an Android application, just not outside the application. The Android SDK includes an SQLite 3.0 database tool that allows you to browse table contents, run SQL commands, and perform other useful functions on SQLite databases. Here I would like to share how we can access the SQLite database from an emulator.</p>
<p><strong>Step 1</strong>: 	Create a database-using application:</p>
<p>For example, as follows:</p>
<p>Application: TestDatabase</p>
<p>Package Name: com.android.TestDatabase</p>
<p>Database Name: TestingDatabase</p>
<p>Table Name: TestingTable</p>
<p><em> </em></p>
<p><strong>Step 2</strong>: 	Launch the application to create a database for the application.</p>
<p><em> </em></p>
<p><strong>Step 3</strong>: 	Open a command prompt. For example, on Windows, go to Start &gt; Run and type &#8220;cmd&#8221;</p>
<p><em> </em></p>
<p><strong>Step 4</strong>: 	Navigate to the tools folder in the Android SDK.</p>
<p><em> </em></p>
<p><strong>Step 5</strong>: 	Input the following at the command prompt:</p>
<pre>d:\android-sdk\tools&gt;adb shell

# cd data/data

# cd com.android.TestDatabase

# cd databases

# sqlite3 TestingDatabase;

sqlite3 TestingDatabase

SQLite3 version x.x.x

Enter ".help" for instructions

sqlite&gt;</pre>
<p><em> </em></p>
<p><strong>Step 6</strong>: 	From here you can fire your queries.</p>
<p>For example:</p>
<pre>sqlite&gt; select * from TestingTable;</pre>
<p><em> </em></p>
<p><strong>Step 7</strong>: 	To exit, press ctrl+c</p>
<p><em> </em></p>
<p><strong>Step 8</strong>: 	Then you can check the directories inside the folder.</p>
<p>For example, let’s check all the databases created in the folder &#8220;databases&#8221;</p>
<p>Type:</p>
<pre># cd databases

# ls

ls

TestingDatabase</pre>
<p>Thanks for reading, and I hope this helps.  If you have any questions about this specific tutorial or any other issues re: coding for Android, drop us a line any time from our contact page!</p>
<p><em> </em></p>
<p><em> </em></p>
<p>Nirav Shah<br />
Software Engineer<br />
Sourcebits Tech Pvt Ltd.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/access-android-application-database-from-an-emulator/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Loading Images from Remote Server over HTTP on a Separate Thread</title>
		<link>http://www.androidkit.com/loading-images-from-remote-server-over-http-on-a-separate-thread</link>
		<comments>http://www.androidkit.com/loading-images-from-remote-server-over-http-on-a-separate-thread#comments</comments>
		<pubDate>Fri, 28 May 2010 12:58:45 +0000</pubDate>
		<dc:creator>binil</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[developers]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=236</guid>
		<description><![CDATA[<p>by Binil Thomas</p>
<p>Whenever a user launches an Android application, a thread called &#8220;main&#8221; is automatically created. This main thread, also called the UI thread, is crucial since it’s responsible for dispatching events to various widgets, including the drawing events.&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>by Binil Thomas</p>
<p>Whenever a user launches an Android application, a thread called &#8220;main&#8221; is automatically created. This main thread, also called the UI thread, is crucial since it’s responsible for dispatching events to various widgets, including the drawing events. For careless Android developers, this single thread can be the overarching reason for poor app performance. With so much riding on a single thread performing long operations like network access or database queries, any interference on this thread will block up the entire user interface. No events can be dispatched – including drawing events – while long operations are underway, and from the user&#8217;s perspective, the application appears hung. Even worse, if the UI thread is blocked for more than a few seconds (about 5 seconds currently) the user will encounter the dreaded &#8220;application not responding&#8221; (ANR) dialog.</p>
<p>BaseAdapter is an Adapter object that acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to specific data points and is also responsible for making a View for each point in the data set. So, taking the example of downloading an image over HTTP, there may be some slowdown in our application with the Main UI thread getting blocked for more than a few seconds, and users might be presented with the ANR dialog. To avoid this situation I have some suggestions:</p>
<p>1. Use ExecuterService (Thread pool)<br />
2. Use AsynTask<br />
3. Use SoftReference Drawable Object<br />
4. Create the ListView first, then download images<br />
5. Make use of OnScrollListener Interface</p>
<p>I’ve written a sample application to help Android developers visualize this implementation.</p>
<p>Here we have AbastractListAdapter, an extension of BaseAdapterClass:</p>
<pre>public abstract class AbstactListAdapter extends BaseAdapter {
	public AbstactListAdapter(Context context) {
		this.context = context;
	}
	public abstract void setScrollStatus(boolean scroll);
	public abstract void scrollIdle(AbsListView view);
}</pre>
<p>There are two methods of implementation for Class ListAdapterScrollListener and Onscrollistner.</p>
<pre>public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
		adapter.setScrollStatus(true);
	}
public void onScrollStateChanged(AbsListView view,intSrollState) {
		switch (scrollState) {
		case OnScrollListener.SCROLL_STATE_IDLE:
			adapter.scrollIdle(view);
			break;
		case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
			adapter.setScrollStatus(true);
			break;
		case OnScrollListener.SCROLL_STATE_FLING:
			adapter.setScrollStatus(true);
			break;
		}
}</pre>
<p>In my onCreate method I set up and configure the list view to load the views and set the listner for Scroll.</p>
<pre>public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Adapter mAdapter=new Adapter(this);
        setListAdapter(mAdapter);
        getListView().setOnScrollListener(new 		ListAdapterScrollListener(mAdapter));
      }</pre>
<p>I use an Adapter class to extend AbstractAdapterClass and implement BaseAdapter, both of which help to load images when scrolling is idle.</p>
<p>The image is loaded in a separate threadpool. I have used Executerservice and assign a threadpool to download images. This method employs a runnable which will extend Assigntask. This ImageLoader class has a subclass, workerthread, which extends Assyntask and implements runnables. This class uses ExecutorService, and assigns 5 threads to do the work. Other implementations of this kind launch a separate thread per image, meaning that the network connection will become clogged with any image load. Assigning the task to the workerthread subclass and using onprogressupdate to notify the adapter to display the image reduces the burden.</p>
<p>You’ll notice the use of SoftReference here. While this appears to work well, I haven’t done any significant load or performance testing, so it may not be necessary. Since bitmap/drawable objects require memory, and Android supports 16mb of heap, it’s better to classify those objects as SoftReference objects. SoftReferences pointing to softly reachable objects are guaranteed to be cleared before the VM triggers an OutOfMemoryError.  This can be written as follows:</p>
<pre> public class ImageLoader {

private class WorkerThread extends AsyncTask implements Runnable{
		public WorkerThread(String url,int pos) {
			this.url=url;
			intex=pos;
			}
		@Override
		protected void onProgressUpdate(Void... values) {
			mAdapter.notifyDataSetChanged();
			super.onProgressUpdate(values);
		}
		@Override
		public void run() {
			Cache.put(intex,new SoftReference(readDrawableFromNetwork(this.url)));
			publishProgress();
		}
	}

	public Drawable getDrawble(int pos)
	{
		SoftReference mReference=Cache.get(pos);;
		if(mReference!=null)
			return mReference.get();
		else
			return null;
	}

/*method to get Image if already or to start new task to download*/
	public void loadImage(int First,int Last) {
			try{
					_exec = Executors.newFixedThreadPool(5);
				for(int pos=First;pos&lt;=Last;pos++){
					if(Cache.containsKey(pos)){
						if(Cache.get(pos).get()==null)
							_exec.execute(new  WorkerThread(Dataset.mStrings[pos],pos));
					}else{
						_exec.execute(new  WorkerThread(Dataset.mStrings[pos],pos));
					}
				}
			}catch (Exception e) {
				_exec.shutdown();
			}

	}//end of method

	private static Drawable readDrawableFromNetwork(String url ) {
	   Write code here to downlaod image from network.
	}//end of method
}</pre>
<p>And that’s it!</p>
<p>For your reference, the code has been packaged for you to download and inspect <a href="http://www.androidkit.com/wp-content/uploads/2010/05/ImageDownload.zip">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/loading-images-from-remote-server-over-http-on-a-separate-thread/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing Portable Android Applications</title>
		<link>http://www.androidkit.com/writing-portable-android-applications</link>
		<comments>http://www.androidkit.com/writing-portable-android-applications#comments</comments>
		<pubDate>Wed, 21 Apr 2010 02:45:33 +0000</pubDate>
		<dc:creator>cary</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[handset differentiation]]></category>
		<category><![CDATA[screen resolution]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=218</guid>
		<description><![CDATA[<p><strong>(Binil Thomas)</strong></p>
<p>Anyone with significant time in mobile application development understands the challenges of writing portable applications. There are tons of reasons for this, but probably the biggest hurdles we face are:</p>
<ul>
<li>Varying screen sizes</li>
<li>Varying screen resolutions</li>
<li>Varying</li></ul><p>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><strong>(Binil Thomas)</strong></p>
<p>Anyone with significant time in mobile application development understands the challenges of writing portable applications. There are tons of reasons for this, but probably the biggest hurdles we face are:</p>
<ul>
<li>Varying screen sizes</li>
<li>Varying screen resolutions</li>
<li>Varying hardware configurations</li>
<li>Varying media formats; such as for images, audio, video</li>
<li>Varying input methods; e.g. touch screen, T9 key pad, qwerty keypad</li>
<li>Non-standard, device-specific hardware keys</li>
</ul>
<p>And so on and so forth &gt;_&lt;</p>
<p>Android engineers, anticipating the witches brew of OEM handsets they would encounter, took steps to try and alleviate the situation by standardizing some key features:</p>
<ul>
<li>A very rich widget set that can scale according to needs</li>
<li>Standardized way of implementing custom widgets</li>
<li>Standardized user interface conventions for touch screen devices</li>
<li>Standardized image capture formats {still buggy from time to time}</li>
<li>Standardized mechanism for sharing code across different components; such as user interface elements, fixed content or a specific activity</li>
<li>Standardized on a base set of hardware keys; e.g. Home, Back, End, and Trackball</li>
</ul>
<p>Above notwithstanding, with screen sizes and resolutions still very much device dependent {see: <a href="http://www.t-mobileg1.com/">T-Mobile G1</a>, <a href="http://www.motorola.com/Consumers/US-EN/Consumer-Product-and-Services/Mobile-Phones/Motorola-DROID-US-EN?localeId=33 ">Motorola Droid</a>, <a href="http://www.google.com/phone/?hl=en&amp;s7e=">Google Nexus One</a>, HTC Hero and so on}, creating a consistent UI that both looks good and works well on all platforms has been a slog. For Android developers or those just interested in Android application development, here we present a method and a design pattern that can be utilized to achieve precisely that. The focus points are as follows:</p>
<ul>
<li>Understand the functionality that needs to be replicated per device. This can be represented by a Java interface to achieve, for example, scaled UI elements across varying screen sizes and resolutions.</li>
<li>Separate device-specific features into device-specific implementations. For example, each phone {including from the same manufacturer} might have different hardware keys, or even different keypads (such as T9, QWERTY, or SureType). If an application is to work on different phones with different input mechanisms, it must take into account these differences when implementing.</li>
<li>A Class Factory that can intelligently instantiate the device-specific components of multiple handset designs.</li>
</ul>
<p>Let’s take for example the case of displaying a splash screen at application launch. Here we address the issue of supporting for multiple devices. The first act of separating the functionality begins with this interface:</p>
<pre>

public interface SplashableScreen {
<p style="padding-left: 30px;">public void showSplashImage(ImageView mView);
<p style="padding-left: 30px;">public void startSpalshing() throws Exception;
<p style="padding-left: 30px;">public void SetSplashDuration(int time);

}
</pre>
<p>Any screen that can be shown as a splash has the functionality as described by the methods indicated.</p>
<p>A device-specific implementation / screen-specific implementation can be written as follows:</p>
<pre>

public class SplashScrren_320_480 implements SplashableScreen{
<p style="padding-left: 30px;">public void showSplashImage(ImageView mView){
<p style="padding-left: 60px;">// Write code speficic to this resolution.
<p style="padding-left: 30px;">}

}
</pre>
<p>And a proper implementation can be instantiated and used as follows:</p>
<pre>
<p style="padding-left: 30px;">public class SplashFactory{
<p style="padding-left: 60px;">public static SplashableScreen getSplashScreen(){
<p style="padding-left: 60px;">// Given a device metrics, instantiate appropriate class and return.
<p style="padding-left: 60px;">}
<p style="padding-left: 30px;">}
</pre>
<p>We’re pleased to offer the full code for this useful application for download <a href="http://www.androidkit.com/wp-content/uploads/2010/04/SplashScreen.zip" target="_self">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/writing-portable-android-applications/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AndroidBook Now available in Android Market</title>
		<link>http://www.androidkit.com/androidbook-now-available-in-android-market</link>
		<comments>http://www.androidkit.com/androidbook-now-available-in-android-market#comments</comments>
		<pubDate>Fri, 28 Aug 2009 14:11:46 +0000</pubDate>
		<dc:creator>rohit</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Sourcebits]]></category>
		<category><![CDATA[Facebook App for Android]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=213</guid>
		<description><![CDATA[<p><a href="http://www.cyrket.com/package/com.sourcebits.androidbook">AndroidBook</a> after a month of intensive bug fixing sessions is again available in Android Market. We are sure there are few more bugs that we need to fix, but we did not want our users to keep on waiting. Rest&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cyrket.com/package/com.sourcebits.androidbook">AndroidBook</a> after a month of intensive bug fixing sessions is again available in Android Market. We are sure there are few more bugs that we need to fix, but we did not want our users to keep on waiting. Rest assured, this build is far far better then the last one we put up in the Android Market. We look forward to your feedback and comments on this build.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/androidbook-now-available-in-android-market/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AndroidBook – The Android Facebook – soon to be released.</title>
		<link>http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released</link>
		<comments>http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released#comments</comments>
		<pubDate>Mon, 01 Jun 2009 09:10:33 +0000</pubDate>
		<dc:creator>Shesh</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA["Social Media"]]></category>
		<category><![CDATA["Social Networking"]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AndroidBook]]></category>
		<category><![CDATA[Facebook]]></category>

		<guid isPermaLink="false">http://www.androidkit.com/?p=158</guid>
		<description><![CDATA[<p> </p>
<p></p>
<p class="MsoNormal">Android facebook users, you don’t have to feel left out of the <a title="AndroidKit - AndroidBook" href="http://www.facebook.com" target="_blank">facebook</a> <span> </span>juggernaut <span> </span>anymore – you get the same easy to use, popular facebook that is making waves&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-IN</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">Android facebook users, you don’t have to feel left out of the <a title="AndroidKit - AndroidBook" href="http://www.facebook.com" target="_blank">facebook</a> <span> </span>juggernaut <span> </span>anymore – you get the same easy to use, popular facebook that is making waves on the iPhone, on your Android.</p>
<p class="MsoNormal"><a rel="attachment wp-att-159" href="http://www.androidkit.com/?attachment_id=159"><img class="alignnone size-medium wp-image-159" title="home_newsfeeds" src="http://www.androidkit.com/wp-content/uploads/2009/06/home_newsfeeds-200x300.png" alt="home_newsfeeds" width="190" /></a> <a rel="attachment wp-att-160" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/home_notifications"><img class="alignnone size-medium wp-image-160" title="home_notifications" src="http://www.androidkit.com/wp-content/uploads/2009/06/home_notifications-200x300.png" alt="home_notifications" width="190" /></a></p>
<p class="MsoNormal">The Design follows the same popular features of facebook you are used to, and far superior to the clones that are a dime a dozen on the android market.</p>
<p class="MsoNormal">Of course you have to use certain features like registering for an account and editing your profile settings on the popular facebook website , but this app comes very close to the home grown iPhone app. Actually, it beats it in looks and some features of user-intuitiveness.</p>
<p class="MsoNormal"><a rel="attachment wp-att-161" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/profile_walls"><img class="alignnone size-medium wp-image-161" title="profile_walls" src="http://www.androidkit.com/wp-content/uploads/2009/06/profile_walls-200x300.png" alt="profile_walls" width="190" /></a> <a rel="attachment wp-att-162" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/profile_photos"><img class="alignnone size-medium wp-image-162" title="profile_photos" src="http://www.androidkit.com/wp-content/uploads/2009/06/profile_photos-200x300.png" alt="profile_photos" width="190" /></a></p>
<p class="MsoNormal">Facebook opened up its API for 3<sup>rd</sup> party development, saying they were not interested to pursue other platforms after having developed an in-house version for the iPhone. RIM engineers also collaborated with Facebook to develop one for the blackberry.<span> </span>One is not aware of the reason why this step motherly treatment for Android, but it is. This could be due to Google going the MySpace way, but it is true that Facebook has even stopped building their API in java since mid 2008.</p>
<p class="MsoNormal"><a rel="attachment wp-att-163" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/profile_photos_gallery"><img class="alignnone size-medium wp-image-163" title="profile_photos_gallery" src="http://www.androidkit.com/wp-content/uploads/2009/06/profile_photos_gallery-200x300.png" alt="profile_photos_gallery" width="190" /></a> <a rel="attachment wp-att-164" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/friends_friendslist"><img class="alignnone size-medium wp-image-164" title="friends_friendslist" src="http://www.androidkit.com/wp-content/uploads/2009/06/friends_friendslist-200x300.png" alt="friends_friendslist" width="190" /></a></p>
<p class="MsoNormal">Facebook has not opened up its API fully. It is still holding on to Chat and Inbox APIs. <span> </span>A lot of Android and 3<sup>rd</sup> party apps out there are only catering to obtaining News Feeds, friend -lists from Facebook and sending SMSs in the form of status updates, and thats about it!.</p>
<p class="MsoNormal"><a rel="attachment wp-att-165" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/chat_onlinefriend"><img class="alignnone size-medium wp-image-165" title="chat_onlinefriend" src="http://www.androidkit.com/wp-content/uploads/2009/06/chat_onlinefriend-200x300.png" alt="chat_onlinefriend" width="190" /></a> <a rel="attachment wp-att-166" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/chat_onlinechat"><img class="alignnone size-medium wp-image-166" title="chat_onlinechat" src="http://www.androidkit.com/wp-content/uploads/2009/06/chat_onlinechat-200x300.png" alt="chat_onlinechat" width="190" /></a></p>
<p class="MsoNormal">AndroidBook has broken the barrier, it is the closest you can get to the iPhone app developed by Facebook. We did it the tough way – but we did it!. This despite the fact that facebook for iPhone is a homegrown application, which had access to the closed facebook APIs.</p>
<p class="MsoNormal"><a rel="attachment wp-att-167" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/inbox_compose"><img class="alignnone size-medium wp-image-167" title="inbox_compose" src="http://www.androidkit.com/wp-content/uploads/2009/06/inbox_compose-200x300.png" alt="inbox_compose" width="190" /></a> <a rel="attachment wp-att-168" href="http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/inbox_friendssearch"><img class="alignnone size-medium wp-image-168" title="inbox_friendssearch" src="http://www.androidkit.com/wp-content/uploads/2009/06/inbox_friendssearch-200x300.png" alt="inbox_friendssearch" width="190" /></a></p>
<p class="MsoNormal" style="text-align: left;"><strong>Features of AndroidBook:</strong></p>
<ul>
<li><!--[if !supportLists]-->Login – Login to Facebook, and provide link to Facebook website for Sign Up</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="text-align: left;"><strong>Home:</strong></p>
<ul>
<li><!--[if !supportLists]-->News Feeds (Status Updates and Links)</li>
<li><!--[if !supportLists]-->Notifications (Updates to Photos)</li>
<li><!--[if !supportLists]-->Requests (Friend requests)</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="text-align: left;"><strong>Profile:</strong></p>
<ul>
<li><!--[if !supportLists]--> Wall (Compose status updates on wall)</li>
<li><!--[if !supportLists]-->Info (Information of Logged in User)</li>
<li><!--[if !supportLists]-->Photos, Take, Replace and Upload to personal Album.</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="text-align: left;"><strong>Friends:</strong></p>
<ul>
<li><!--[if !supportLists]-->Friends Search and Friends Profile</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="text-align: left;"><strong>Chat:</strong></p>
<ul>
<li><!--[if !supportLists]-->Chat with Available friends</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="text-align: left;"><strong>E-mail: </strong></p>
<ul>
<li><!--[if !supportLists]--><!--[endif]-->Inbox (Select, Compose, Reply <span> </span>and Send)</li>
<li>Sent <span> </span>(Delete)</li>
<li>Updates (Events Notifications)</li>
</ul>
<p>Take Photo, Cancel, Replace or<span> </span>Save photo (store locally or upload to personal album)<br />
Logout</p>
]]></content:encoded>
			<wfw:commentRss>http://www.androidkit.com/androidbook-%e2%80%93-the-android-facebook-%e2%80%93-soon-to-be-released/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>

