Archive

Archive for January, 2009

Forums now available!

January 30th, 2009

After getting feedback from lot of our users, we have now added forums, so that readers can discuss about Android. Forums can be accessed using Forum page from page menu.

We will be providing all the support through these forums, to help Android developers as much as we can. But like any community, this forums can only be useful if you participate, interact, connect with other readers. Looking forward for great interactions with all of you.

If you want to add specific forums, to encourage discussions about a specific topic, then do email me accordingly at bidwai dot sushrut |at| gmail dot com. 

Please note that, we are still fine tuning forum support, in terms of usability and other options. So consider it of beta quality :-) .

Misc

Opera mini now availabel for Android

January 29th, 2009

Its official! Opera Mini is not available for Android phones. Check this out for more information. This is the power having an open source platform for your mobile. Cool softwares are easily available.

One of the most important things to note is, how fast Opera Mini has been made available for Android users. This reaffirms our faith, as users, that Android market place will move much faster than any other competitors.

News

Android Basics – Notifications

January 28th, 2009

All the mobile application needs some background processing. Android applications are not exception to that. While the application is working in the background, user can go to other application on the phone. While working in the background, if something happens in the application (like an event) that requires user attention, the application should tell the user about the event. The application should not open some application screen (activity) in this case since your can be doing some other important task.
The solution for this is the notification. Notification allows the application to notify the user of the event without getting into way of current user task.

Showing text notifications:
Android has provided a class as Toast that can be used to show simple text messages. The Toast class provides static makeToast method to create the toast object. The text message can be shown as follows:

Toast.makeToast(context, “Some message text”, Toast.LENGTH_LONG);

The LENGTH_LONG is the duration of the notification. Another value for the duration is Toast.LENGTH_SHORT.

Notification with user defined views:
The Toast can also be used with user defined views. Let’s create a notification with some image. Here is the xml layout file for the Toast view:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/toast_frame">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/user_icon"
/>

<TextView
android:id="@+id/toast_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

</LinearLayout>
</FrameLayout>


The frame layout is using android defined drawable image toast_frame. The image view is using some image as user_icon (you have to add to user_icon.jpg image in res/drawable folder). Now we can use this layout for out toast.

		LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		View view = inflater.inflate(R.layout.toast_view, null);
		// set the text in the view
		TextView message = (TextView) view.findViewById(R.id.toast_message);
		message.setText("Some test message");

		Toast toast = new Toast(this);
		toast.setView(view);
		toast.show();

The inflaterService is used to access the layout file. The toast will be shown with image and the message. You can create the view in the code also like this:

		TextView message = new TextView(this);
		message.setText("Some message");

		Toast toast = new Toast(this);
		toast.setView(message);
		toast.show();

Status Bar Notifications:
The notification can be shown in the phone status bar too. Android has provided Notification class that can be used to create the notification which can be shown on the status bar. To show notification NotificationManager is required. The NotificationManager used the android notification service to show the notifications. The content view and content intent has to be set to the notification. ContextView gets shown in the extended notification bar. The content intent is the intent that gets executed when notification entry in expanded status bar is clicked. The content Intent is the pending intent. The contentView and ContentIntent can be set with the help of setLatestEventInfo() method. This is how it can be done:

	NotificationManager manger = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

		Notification notification = new Notification(R.drawable.icon,
				"Notification text that will be shown on status bar.", System
						.currentTimeMillis());

		// The PendingIntent will launch activity if the user selects this
		// notification
		PendingIntent contentIntent = PendingIntent.getActivity(context,
				REQUEST_CODE, new Intent(this, MyActivity.class), 0);
		notification.setLatestEventInfo(this, "Content Title", "Content text",
				contentIntent);
		manger.notify(NOTIFICATION_ID, notification);

Here pending intent is created for the activity. If the intent is executed the given activity will be shown. The notification can be cancelled with the help of notification id.

manger.cancel(NOTIFICATION_ID);

To see the expanded status bar go to emulator Home. Click on Menu, click Notification menu item. The expanded status bar will be shown with all the notifications. The values we set in contentIntent will be shown in the Notification entry.

Adding sound and Vibration to Notification:
The notification class provides various public fields. Out of which sound and vibrate can be used to set the notification sound and vibration pattern required for the notification. Here is the code:

notification.sound = "file:///sdcard/audiofile.mp3"
notification.vibrate = new long[] { 200, 300 };

The notification will vibrate for 300ms after 200ms of delay. Notification class also has default values defined for sound and vibrations those can be used as

notification.defaults = notification.DEFAULT_SOUND | notification.DEFAULT_VIBRATE;

Note for using vibrate functionality you need to define user permission for vibration in the AndroidManifest.xml file
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>

One time or repeating sound and vibration:
You can also make the notification sound repeating or one time. Notification class has provided various flags for these settings.
Eg. To show the repeating notifications use

notification.flags = FLAG_INSISTENT;

One time notification is provided by default. Flag for one time notification is FLAG_ONLY_ALERT_ONCE.

Now you know the details as how to use notifications in android. Use notifications when application is running in background.

Android Basics , , , , , ,

App attacks on Gphones

January 27th, 2009

Malware has already made its way into the Android market place. According to these news reports 1, 2 applications which takes “advantage” of Android phones or applications which harms the phone are available for download in Android market place. According to few experts this has raised question on the policy of keeping the open market.

First of all, Android market place does not mean that Google or Open handset alliance is verifying the applications. So a user can be mislead to download a malicious application. Even though Google has reactively removed such application from market place, but from here onwards if Google/OHA wants to keep up the momentum around Android and make Android as mainstream mobile platform they will have to become proactive. A small certification fees which will cover the cost of testing out the application can be applied before an application is made available on the market place. I dont think Android developers and application vendors will mind such entry fees as we hope to reach a very large consumer base through such market place which users trust and hence use.

Android

Android Basics – Managing Activity States – Part II

January 26th, 2009

In the last post we saw how to use android provided onSaveInstanceState() method to manage the activity state. In this post we will see how we can use preferences to save the activity state.

Android provided two ways to use the preferences

1. Shared Preferences: The shared preferences can be used by all the components (activities, services etc) off the applications.

2. Activity handled preferences: These preferences can only be used with in the activity and can not be used by other components of the application.

Shared Preferences:

The shared preferences are managed with the help of getSharedPreferences method of the Context class. The preferences are stored in the file and file name is used to refer to the preferences.

Here is how you can retrieve the stored values from the preferences

...
public static final String PREF_FILE_NAME = "PrefFile";
...

SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

 int storedPreference = preferences.getInt("storedInt", 0);
 // use the values

MODE_PRIVATE is the operating mode for the preferences. It is the default mode and means the created file will be accessed by only the calling application.  Other two mode supported are MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE. In MODE_WORLD_READABLE other application can read the created file but can not modify it. In case of MODE_WORLD_WRITEABLE other applications also have write permissions for the created file.

To store values in the preference file SharedPreference.Editor object has to be used. Editor is the nested interface of the SharedPreference class.

...
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

 SharedPreferences.Editor editor = preferences.edit();
 editor.putInt("storedInt", storedPreference); // value to store
 editor.commit();
....

Editor also support methods like remove() and clear() to delete the preference value from the file.

Activity Preferences:

The shared preferences can be used by other application components. But if you do not need to share the preferences with other components and want to have activities private preferences. You can do that with the help of getPreferences() method of the activity. The getPreference method uses the getSharedPreferences() method with the name of the activity class for the preference file name.

Following is the code to get preferences

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
// use the values

The code to store values is also same as in case of shared preferences.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

You can also use other methods like storing the activity state in database. Note Android also contains a package called ‘android.preference’. The package defines classes to implement application preferences UI. We will see the preference package in some other post.

Android, Android Basics , , , ,

Android Basics – Managing Activity States – Part I

January 24th, 2009

Managing and preserving an activity state is very important.  If the activity state is not preserved properly, application can loose the data.

Using onSaveInstanceState():
Android provide two method onSaveInstanceState() and onRestoreInstanceState() to handle the activity state. onSaveInstanceState method gets called for an activity when user leaves the activity. Note this method is only called when activity is present in the History state and user can come back to the activity. Android provide a default implementation for this method. The default implementation save state of all the views which has id attribute defined. The default implementation of the onRestoreInstanceState() restores the state of the views. The bundle saved by the onSaveInstanceState() activity is passed to onCreate() and onRestoreInstanceState() methods both.

You can override the onSaveInstaceState method to save activity internal variable in the bundle. But do not forget to call the onSaveInstanceState method of the super class, otherwise handle the UI component state management your self.

Let’s create an example that clears the concepts

Example:
Here is the layout of the activity that ask user about it name and a secret

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter your name:"
>
</TextView>
<EditText
android:id="@+id/nameEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
>
</EditText>
<TextView
android:id="@+id/secretMessage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter your Secret (I will not remember this):"
>
</TextView>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
>
</EditText>
</LinearLayout>

Note that the editText for the secret message dose not have an Id attribute defined. The StateExampleActivity class looks like this

 public class StateExampleActivity extends Activity {

        /**
        * @see android.app.Activity#onCreate(android.os.Bundle)
        */
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.state_example_activity);
        }

        /**
        * @see android.app.Activity#onSaveInstanceState(android.os.Bundle)
        */
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState); // the UI component values are saved here.
            Toast.makeText(this, "Activity state saved", Toast.LENGTH_LONG).show();
        }

        /**
        * @see android.app.Activity#onDestroy()
        */
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Toast.makeText(this, "Activity is getting killed", Toast.LENGTH_LONG).show();
        }
    }

Our implementation of onSaveInstanceState() does not do much since the state of the views with Id is by default saved by the onSaveInstanceSate() method of super class.

Make the entry of the StateExampleActivity in the AndroidManifest.xml

<activity android:name="StateExampleActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

Now start the application in the emulator. Put some data in the activity fields when activity is shown. Click on the Home button on the emulator.  If only ‘Activity saved’ message is shown means the activity is not killed and the UI components does not loose their values.  If you go back to the activity, you will be able to see values for both the text boxes name and secret text box.

To kill the activity when we leave it, android provided ‘Dev Tools’ can be used.  Dev tools application can be opened from list of applications.  Go to the Development Settings. You will see number of useful development settings. Check the ‘Immediately destroy activities’ check box. This will kill the activity after we left it.

Now run the application and follow the steps we followed earlier. Now after clicking the emulator home button the activity save and destroy message will be shown.  If you reopen the activity now only user name value will be restored and secret will be lost.

Note if you click on the emulator BACK button the activity state will not be saved since the activity dose not go in the History stack. In that case the values for all the components will be lost.

Using state Bundle to save data:

Application can use activity’s state bundle to save data other than the UI component values, as shown

   protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("TO_REMEMBER", "Remember this"); // adding a string in bundle
        Toast.makeText(this, "Activity state saved", Toast.LENGTH_LONG).show();
    }

The saved value can be restored in onCreate method as follows:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.state_example_activity);

        if (savedInstanceState != null) {
            Toast.makeText(this, "onCreate() : " + savedInstanceState.getString("TO_REMEMBER"), Toast.LENGTH_LONG).show();
        }
    }

The state can be restored in onRestoreInstanceState() method too. Note that the onCreate() or onRestoreInstanceState() methods will only be called if the activity is killed.

As we saw the Android helps us to keep the state of the activity. But what if application wants to preserve the values even when user cancels the activity by using BACK button? That can be achieved with the help of preferences. We will see how to use preferences in second part of this post.

Android, Android Basics , , ,

Samsung’s Android handset will reach market in 2009

January 24th, 2009

Samsung is also launching an Android based smartphone. The phone is expected to be released in mid 2009. All the device features are not known yet but the phone will be touch-screen based with minimum buttons and design similar to Omnia (see image).

Samsung Omnia

After Sony Ericsson and Motorola, Samsung is now the third major phone manufacturer to have announced Android based phones. Android market is getting hot.

Android, Mobile Market, News , , ,

Android Basics – Dialogs and Floating Activities

January 23rd, 2009

As we know android provide Activity class for developing application screens. But many a time application needs to show Dialog boxes or floating screen to do simple tasks likes taking input from user or ask for confirmation etc.

In android Dialogs can be created in following 2 ways:

1. Creating a dialog with the help of android Dialog class or its subclass like AlertDialog.
2. Using dialog theme for the activity.

Using android Dialog class:
Let see how we can create a dialog with the help of Dialog class. To define a dialog the dialog class has to extend the android Dialog class.

class MyDialog extends Dialog {
/**
* @param context
*/
public MyDialog(Context context) {
super(context);
}
}

Define a layout for our dialog. Here is the xml file for of the layout that asks for user’s name.

<?xml version=”1.0″ encoding=”utf-8″?>


<LinearLayout
android:id="@+id/widget28"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<TextView
android:id="@+id/nameMessage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enter Name:"
>
</TextView>
<EditText
android:id="@+id/nameEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
>
</EditText>
<LinearLayout
android:id="@+id/buttonLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
>
<Button
android:id="@+id/okButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
>
</Button>
<Button
android:id="@+id/cancelButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel"
>
</Button>
</LinearLayout>
</LinearLayout>

Use the above layout for our dialog

class MyDialog extends Dialog {
....

/** * @see android.app.Dialog#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("TestApp", "Dialog created"); setContentView(R.layout.mydialog); } }

Now the dialog can be shown by calling the show method like this

MyDialog dialog = new MyDialog(context);
dialog.show();

Event handling for the Dialog controls are same as in case of the activity. Modify the dialog code to handle the onclick event on the ok and cancel button.

class MyDialog extends Dialog implements OnClickListener {

private Button           okButton;

private Button           cancelButton;

private EditText         nameEditText;

protected void onCreate(Bundle savedInstanceState) { okButton = (Button) findViewById(R.id.okButton); cancelButton = (Button) findViewById(R.id.cancelButton);

nameEditText = (EditText) findViewById(R.id.nameEditText);

okButton.setOnClickListener(this); cancelButton.setOnClickListener(this); }

public void onClick(View view) { switch (view.getId()) { case R.id.okButton: dismiss(); break; case R.id.cancelButton: cancel(); break; } } }

To close the dialog the dismiss() method can be called. The dialog can call the dismiss method itself or some other code can also close the dialog by calling dismiss().

The dialog also supports cancel. Canceling means the dialog action is canceled and does not need to perform any operation. Dialog can be canceled by calling cancel() method. Canceling the dialog also dismisses the dialog.

When user clicks the phones BACK button the dialog gets canceled. If you do not want to cancel the dialog on BACK button you can set cancelable to false as

setCancelable(false);

Note that the cancel() method call till be able to cancel the dialog (which is the desirable functionality in most cases). The dialog’s cancel and dismiss events can be listened with the help of OnCancelListener and OnDismissListener.

Returning information from dialog:
Now our dialog can take the name from the user. We need to pass that name to the calling activity. Dialog class does not provide any direct method for returning values. But our own Listener can be created as follows:

public interface MyDialogListener {

public void onOkClick(String name); // User name is provided here.

public void onCancelClick(); }

The dialog’s constructor has to be modified to take the object of the listener:

public MyDialog(Context context, MyDialogListener listener) {
super(context);
this.listener = listener;
}

Now the calling activity needs to provide the object of the class that implements the MyDialogListener which will gets called on ok or cancel button clicks.

Now we need update the onclick method to return the user name.

public void onClick(View view) {
switch (view.getId()) {
case R.id.okButton:
listener.onOkClick(nameEditText.getText().toString()); // returning the user's name.
dismiss();
break;
case R.id.cancelButton:
cancel();
break;
}
}

Using AlertDialog:

AlertDialog is the subclass of the Dialog. It by default provide 3 buttons and text message. The buttons can be made visible as required. Following code creates an AlertDialog that ask user a question and provide Yes, No option.

AlertDialog dialog = new AlertDialog.Builder(context).create();

dialog.setMessage("Do you play cricket?"); dialog.setButton("Yes", myOnClickListener); dialog.setButton2("No", myOnClickListener);

dialog.show();

The onClick method code for the button listener myOnClickListener will be like this:

public void onClick(DialogInterface dialog, int i) {
switch (i) {
case AlertDialog.BUTTON1:
/* Button1 is clicked. Do something */
break;
case AlertDialog.BUTTON2:
/* Button2 is clicked. Do something */
break;
}
}

AlertDialog.Builder:
AlertDialog has a nested class called ‘Builder’. Builder class provides facility to add multichoice or single choice lists. The class also provides methods to set the appropriate Adaptors for the lists, set event handlers for the list events etc. The Builder button calls the Button1, Button2, Button3 as PositiveButton, NeutralButton, NegativeButton.

Here is an example of dialog box with Multichoice list

new AlertDialog.Builder(context)
.setIcon(R.drawable.icon)
.setTitle(R.string.alert_dialog_multi_choice)
.setMultiChoiceItems(R.array.select_dialog_items,
new boolean[]{false, true, false, true, false},
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
/* Something on click of the check box */
}
})
.setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {

/* User clicked Yes so do some stuff */ } }) .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) {

/* User clicked No so do some stuff */ } }) .create();

Activity Managed Dialog:

Android also provide facility to create dialogs. Activity created dialog can be managed by Activity methods like showDialog(), onCreateDialog(), onPrepareDialog(), dismissDialog(), removeDialog().
The onCreateDialog create the dialog that needs to be shown, for example

/**
* @see android.app.Activity#onCreateDialog(int)
*/
@Override
protected Dialog onCreateDialog(int id) {
return new AlertDialog.Builder(this).setMessage("How are you?").setPositiveButton("Fine", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) { /* Do something here */ } }).setNegativeButton("Not so good", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) { /* Do something here */ } }).create(); }

You can create multiple dialog boxes and differentiate them with the id parameter. The dialog can be shown with the help of showDialog(id) method. The onCreateDialog method gets called for the first time when showDialog method is called. For subsequent calls to the showDialog() the dialog is not created but shown directly.
If you need to update the dialog before it is getting shown then you can do that in onPrepareDialog() method. The methods get called just before the dialog is shown to the user.
To close the dialog you can call dismissDialog() method. Generally you will dismiss the dialogs in the click handles of the dialog buttons.
The removeDialog() method will remove the dialog from the activity management and if showDialog is again called for that dialog, the dialog needs to be created.

Using android Dialog theme for activity:
Another simple way to show the dialog is to make the Activity to work as a Dialog (floating activity). This can be done by applying dialog Theme while defining the activity entry in the AndroidManifest.xml

<activity android:name=”.DialogActivity” android:label=”@string/activity_dialog” android:theme=”@android:style/Theme.Dialog”>

</activity>

The activity will be shown as a dialog as the activity is using ‘Theme.Dialog’ as theme.

Android Basics , , , , , , ,

Android tools – Droiddraw

January 20th, 2009

Droiddraw is a very good tool available to design the android screen layout files.
Let explore the tools in the today’s post.

The tools can be used directory through the browser. Here is the link for Online Droiddraw tool.

The tool can also be download from the above page, but it provide link for version r1b11. If you want to download version r1b12 get it from here .

Here is the tool image

droiddrawimage

The tool provides the android device screen, where user can design the application screens.
An option to change the device screen size is provide which shows all the screen sizes supported by the android device. There are also options to change the basic root layout of the activity xml.

The tool provides support for android basic Widgets like basic button, checkbox, RadioButtons etc. The tool also provides support advanced widgets like Calendar, Clock, TimePicker, ProgressBar, Gallery etc.The widgets can be added on the device screen by dragging and dropping them on the screen.

The layout tab provides android supported layouts like AbsoluteLayout, FrameLayout, LinearLayout etc.
The layouts can also be added on the device screen. The layout can contain other layouts out widgets.

The property tab shows configurable properties of the selected screen component (widget or layout).  Eg. Let’s add an EditText to the screen which can take only integer values (like age).

Drag the EditText widget from Widget tab and drop it on the screen view.
Adjust the position and size of the edit text as required.
Go to the Properties tab set the Id property as ‘@+id/ageEditText’
Keep Text property empty. Set the Number Format as integer.
Click Apply to set the properties.
Click on the Generate button.

Here is the xml generated for above EditText

<EditText
android:id="@+id/textEditText"
android:layout_width="320px"
android:layout_height="wrap_content"
android:text="EditText"
android:textSize="18sp"
android:layout_x="0px"
android:layout_y="2px"
>
</EditText>

Another tab is the Strings tab. The tab allows the user to define the string that can be referred in the application using resource class(R). The string goes in the res/values/string.xml file. String can be used for android:text property as @string/<string name>. It’s a good practice to use string instead of hard coded string values wherever possible. Android document suggest externalizing string as feature like localization and internationalization will be developed around them.  You can also load string in droiddraw if you have string.xml already defined. Go to the Project menu click on Load string resources and select the string xml from file system. The string from the xml will be loaded and shown in the string tab.

The next tabs are colors and arrays, which provide facility to define colors and array values respective. The color values goes in the res/values/colors.xml. And array values are stored in the res/values/arrays.xml.

As you can see using tool like Droiddraw you will never have to write the layout xml file by hand again.

Android Tools , , , , ,

Android market place opens for Europe

January 19th, 2009

The new year has already been splendid for Android. Lot of companies, enterprises are already building apps for Android instead of iPhone, which has been said to be the biggest competition for Android.

Telecom companies and players are already shifting focus to Android as per our blog posts 1, 2.

Now this news, Android has opened up market place for applications in Europe for selected countries. So we should see a launch of phone there in coming weeks. Google it seems has done all the required home work to take on giants like Blackberry, Symbian, iPhone and Windows mobiles.

It now seems that coming one is really going to change the mobile market, one way or the other.

Mobile Market, News ,