Monday, May 21, 2012

Wiredglitz

The Tech Savvy Website

Development and remote installation of Java service for the Android Devices

Written by:
Igor Darkov, Software Developer of Device Team, Apriorit Inc.

In this article I’ve described:

How to develop simple Java service for the Android Devices; How to communicate with a service from the other processes and a remote PC; How to install and start the service remotely from the PC. 1. Java Service Development for the Android Devices

Services are long running background processes provided by Android. They could be used for background tasks execution. Tasks can be different: background calculations, backup procedures, internet communications, etc. Services can be started on the system requests and they can communicate with other processes using the Android IPC channels technology. The Android system can control the service lifecycle depending on the client requests, memory and CPU usage. Note that the service has lower priority than any process which is visible for the user.

Let’s develop the simple example service. It will show scheduled and requested notifications to user. Service should be managed using the service request, communicated from the simple Android Activity and from the PC.

First we need to install and prepare environment:

Download and install latest Android SDK from the official web site (http://developer.android.com); Download and install Eclipse IDE (http://www.eclipse.org/downloads/); Also we’ll need to install Android Development Tools (ADT) plug-in for Eclipse.

After the environment is prepared we can create Eclipse Android project. It will include sources, resources, generated files and the Android manifest.

1.1 Service class development

First of all we need to implement service class. It should be inherited from the android.app.Service (http://developer.android.com/reference/android/app/Service.html) base class. Each service class must have the corresponding <service> declaration in its package’s manifest. Manifest declaration will be described later. Services, like the other application objects, run in the main thread of their hosting process. If you need to do some intensive work, you should do it in another thread.

In the service class we should implement abstract method onBind. Also we override some other methods:

onCreate(). It is called by the system when the service is created at the first time. Usually this method is used to initialize service resources. In our case the binder, task and timer objects are created. Also notification is send to the user and to the system log: public void onCreate() { super.onCreate(); Log.d(LOG_TAG, “Creating service”); showNotification(“Creating NotifyService”); binder = new NotifyServiceBinder(handler, notificator); task = new NotifyTask(handler, notificator); timer = new Timer(); } onStart(Intent intent, int startId). It is called by the system every time a client explicitly starts the service by calling startService(Intent), providing the arguments it requires and the unique integer token representing the start request. We can launch background threads, schedule tasks and perform other startup operations. public void onStart(Intent intent, int startId) { super.onStart(intent, startId); Log.d(LOG_TAG, “Starting service”); showNotification(“Starting NotifyService”); timer.scheduleAtFixedRate(task, Calendar.getInstance().getTime(), 30000); } onDestroy(). It is called by the system to notify a Service that it is no longer used and is being removed. Here we should perform all operations before service is stopped. In our case we will stop all scheduled timer tasks. public void onDestroy() { super.onDestroy(); Log.d(LOG_TAG, “Stopping service”); showNotification(“Stopping NotifyService”); timer.cancel(); } onBind(Intent intent). It will return the communication channel to the service. IBinder is the special base interface for a remotable object, the core part of a lightweight remote procedure call mechanism. This mechanism is designed for the high performance of in-process and cross-process calls. This interface describes the abstract protocol for interacting with a remotable object. The IBinder implementation will be described below. public IBinder onBind(Intent intent) { Log.d(LOG_TAG, “Binding service”); return binder; }

To send system log output we can use static methods of the android.util.Log class (http://developer.android.com/reference/android/util/Log.html). To browse system logs on PC you can use ADB utility command: adb logcat.

The notification feature is implemented in our service as the special runnable object. It could be used from the other threads and processes. The service class has method showNotification, which can display message to user using the Toast.makeText call. The runnable object also uses it:

public class NotificationRunnable implements Runnable { private String message = null; public void run() { if (null != message) { showNotification(message); } } public void setMessage(String message) { this.message = message; } }

Code will be executed in the service thread. To execute runnable method we can use the special object android.os.Handler. There are two main uses for the Handler: to schedule messages and runnables to be executed as some point in the future; and to place an action to be performed on a different thread than your own. Each Handler instance is associated with a single thread and that thread’s message queue. To show notification we should set message and call post() method of the Handler’s object.

1.2 IPC Service

Each application runs in its own process. Sometimes you need to pass objects between processes and call some service methods. These operations can be performed using IPC. On the Android platform, one process can not normally access the memory of another process. So they have to decompose their objects into primitives that can be understood by the operating system , and “marshall” the object across that boundary for developer.

The AIDL IPC mechanism is used in Android devices. It is interface-based, similar to COM or Corba, but is lighter . It uses a proxy class to pass values between the client and the implementation.

AIDL (Android Interface Definition Language) is an IDL language used to generate code that enables two processes on an Android-powered device to communicate using IPC. If you have the code in one process (for example, in Activity) that needs to call methods of the object in another process (for example, Service), you can use AIDL to generate code to marshall the parameters.

Service interface example showed below supports only one sendNotification call:

interface INotifyService { void sendNotification(String message); }

The IBinder interface for a remotable object is used by clients to perform IPC. Client can communicate with the service by calling Context’s bindService(). The IBinder implementation could be retrieved from the onBind method. The INotifyService interface implementation is based on the android.os.Binder class (http://developer.android.com/reference/android/os/Binder.html):

public class NotifyServiceBinder extends Binder implements INotifyService { private Handler handler = null; private NotificationRunnable notificator = null; public NotifyServiceBinder(Handler handler, NotificationRunnable notificator) { this.handler = handler; this.notificator = notificator; } public void sendNotification(String message) { if (null != notificator) { notificator.setMessage(message); handler.post(notificator); } } public IBinder asBinder() { return this; } }

As it was described above, the notifications could be send using the Handler object’s post() method call. The NotificaionRunnable object is passed as the method’s parameter.

On the client side we can request IBinder object and work with it as with the INotifyService interface.  To connect to the service the android.content.ServiceConnection interface implementation can be used. Two methods should be defined: onServiceConnected, onServiceDisconnected:

ServiceConnection conn = null; … conn = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { Log.d(“NotifyTest”, “onServiceConnected”); INotifyService s = (INotifyService) service; try { s.sendNotification(“Hello”); } catch (RemoteException ex) { Log.d(“NotifyTest”, “Cannot send notification”, ex); } } public void onServiceDisconnected(ComponentName name) { } };

The bindService method can be called from the client Activity context to connect to the service:

Context.bindService(new Intent(this, NotifyService.class), conn, Context.BIND_AUTO_CREATE);

The unbindService method can be called from the client Activity context to disconnect from the service:

Context.unbindService(conn); 1.3 Remote service control

Broadcasts are the way applications and system components can communicate. Also we can use broadcasts to control service from the PC. The messages are sent as Intents, and the system handles dispatching them, including starting receivers.

Intents can be broadcasted to BroadcastReceivers, allowing messaging between applications. By registering a BroadcastReceiver in application’s AndroidManifest.xml (using <receiver> tag) you can have your application’s receiver class started and called whenever someone sends you a broadcast. Activity Manager uses the IntentFilters, applications register to figure out which program should be used for a given broadcast.

Let’s develop the receiver that will start and stop notify service on request. The base class android.content.BroadcastReceiver should be used for these purposes (http://developer.android.com/reference/android/content/BroadcastReceiver.html):

public class ServiceBroadcastReceiver extends BroadcastReceiver { … private static String START_ACTION = “NotifyServiceStart”; private static String STOP_ACTION = “NotifyServiceStop”; … public void onReceive(Context context, Intent intent) { … String action = intent.getAction(); if (START_ACTION.equalsIgnoreCase(action)) { context.startService(new Intent(context, NotifyService.class)); } else if (STOP_ACTION.equalsIgnoreCase(action)) { context.stopService(new Intent(context, NotifyService.class)); } } }

To send broadcast from the client application we use the Context.sendBroadcast call. I will describe how to use receiver and send broadcasts from the PC in chapter 2.

1.4 Android Manifest

Every application must have an AndroidManifest.xml file in its root directory. The manifest contains essential information about the application to the Android system, the system must have this information before it can run any of the application’s code. The core components of an application (its activities, services, and broadcast receivers) are activated by intents. An intent is a bundle of information (an Intent object) describing a desired action — including the data to be acted upon, the category of component that should perform the action, and other pertinent instructions. Android locates an appropriate component to respond to the intent, starts the new instance of the component if one is needed, and passes it to the Intent object.

We should describe 2 components for our service:

NotifyService class is described in the <service> tag. It will not start on intent. So the intent filtering is not needed. ServiceBroadcastReceived class is described in the <receiver> tag. For the broadcast receiver the intent filter is used to select system events: <application android:icon=”@drawable/icon” android:label=”@string/app_name”> … <service android:enabled=”true” android:name=”.NotifyService” android:exported=”true”> </service> <receiver android:name=”ServiceBroadcastReceiver”> <intent-filter> <action android:name=”NotifyServiceStart”></action> <action android:name=”NotifyServiceStop”></action> </intent-filter> </receiver> … 2. Java service remote installation and start 2.1 Service installation

Services like the other applications for the Android platform can be installed from the special package with the .apk extension. Android package contains all required binary files and the manifest.

Before installing the service from the PC we should enable the USB Debugging option in the device Settings-Applications-Development menu and then connect device to PC via the USB.

On the PC side we will use the ADB utility which is available in the Android SDK tools directory. The ADB utility supports several optional command-line arguments that provide powerful features, such as copying files to and from the device. The shell command-line argument lets you connect to the phone itself and issue rudimentary shell commands.

We will use several commands:

Remote shell command execution: adb shell <command> <arguments> File send operation: adb push <local path> <remote path> Package installation operation: adb install <package>.apk

I’ll describe the package installation process in details. It consists of several steps which are performed by the ADB utility install command:

First of all the .apk package file should be copied to the device. The ADB utility connects to the device and has limited “shell” user privileges. So almost all file system directories are write-protected for it. The /data/local/tmp directory is used as the temporary storage for package files. To copy package to the device use the command: adb push NotifyService.apk /data/local/tmp Package installation. ADB utility uses special shell command to perform this operation. The “pm” (Package Manager?) utility is present on the Android devices. It supports several command line parameters which are described in the Appendix I. To install the package by yourself execute the remote shell command: adb shell pm install /data/local/tmp/NotifyService.apk Cleanup. After the package is installed, ADB removes the temporary file stored in /data/local/tmp folder using the “rm” utility: adb shell rm /data/local/tmp/NotifyService.apk. To uninstall package use the “pm” utility: adb shell pm uninstall <package> 2.2 Remote service control

To be able to start and stop the NotifyService from the PC we can use the “am” (Activity Manager?) utility which is present on the Android device. The command line parameters are described in the Appendix II. The “am” utility can send system broadcast intents. Our service has the broadcast receiver which will be launched by the system request.

To start NotifyService we can execute remote shell command:

adb shell am broadcast –a NotifyServiceStart

To stop the NotifyService we can execute remote shell command:

adb shell am broadcast –a NotifyServiceStop

Note, that the NotifyServiceStart and NotifyServiceStop intents were described in the manifest file inside the <receiver> … <intent-filter> tag. Other requests will not start the receiver.

Appendix I. PM Usage (from Android console) pm [list|path|install|uninstall] pm list packages [-f] pm list permission-groups pm list permissions [-g] [-f] [-d] [-u] [GROUP] pm path PACKAGE pm install [-l] [-r] PATH pm uninstall [-k] PACKAGE The list packages command prints all packages. Use the -f option to see their associated file. The list permission-groups command prints all known permission groups. The list permissions command prints all known permissions, optionally only those in GROUP. Use the -g option to organize by group. Use the -f option to print all information. Use the -s option for a short summary. Use the -d option to only list dangerous permissions. Use the -u option to list only the permissions users will see. The path command prints the path to the .apk of a package. The install command installs a package to the system. Use the -l option to install the package with FORWARD_LOCK. Use the -r option to reinstall an exisiting app, keeping its data. The uninstall command removes a package from the system. Use the -k option to keep the data and cache directories around after the package removal. Appendix II. AM Usage (from Android console) am [start|broadcast|instrument] am start -D INTENT am broadcast INTENT am instrument [-r] [-e <ARG_NAME> <ARG_VALUE>] [-p <PROF_FILE>] [-w] <COMPONENT> INTENT is described with: [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] [-c <CATEGORY> [-c <CATEGORY>] …] [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...] [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...] [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...] [-n <COMPONENT>] [-f <FLAGS>] [<URI>] Resources used: Android Installation Guide.

http://developer.android.com/sdk/1.5_r2/installing.html

Android Developer reference.

http://developer.android.com/reference/classes.html

Jesse Burns. Developing Secure Mobile Applications for Android.

https://www.isecpartners.com/files/iSEC_Securing_Android_Apps.pdf

Designing a Remote Interface Using AIDL

http://developer.android.com/guide/developing/tools/aidl.html

Apriorit is an Ukrainian software development company.

Apriorit develops its own products as well as provide offshore development and QA services in the areas of advanced system programming, driver development, software for devices.

One of the key values of Apriorit’s specialists is knowledge generation and sharing of experience.

Learn more about Apriorit and its experience at Apriorit Official site

More Android Articles

How to Convert Video to Android Phone Format

Posted by Max On October - 23 - 2010 ADD COMMENTS

How to Convert Video to Android Phone Format

Android phone is famous for running multiple applications at the same time, but it supports relatively few video formats (only supports H.263, H.264 AVC, MPEG-4 SP video format). So what if to play AVI, Xvid, DivX, MKV, WMV, RM, FLV, SWF, ASF, MPG, MOV, MPEG, HD, MTS, M2TS, and TS on your Android phone like Samsung i7500, Samsung Galaxy, HTC Hero, HTC Legend, HTC Desire HD, HTC Wildfire, Motorola Droid, Motorola Flipout, Sony Ericsson Xperia X10, LG Ally and etc?

If fact, it is very easy to do it so long as you own the professional Android Converter-Bigasoft Total Video Converter.

Bigasoft Total Video Converter, as a professional Android Converter, can easily convert video to Android supported format. No matter what video format you have like AVI, Xvid, DivX, MKV, WMV, RM, FLV, SWF, ASF, MPG, MOV, MTS, M2TS, and TS, the professional Android Video Converter is able to convert them to Android phone video format. Moreover, the ideal Android Converter also can serve as Android Audio Converter to convert any audio format to Android phone supported audio format or to extract audio from video and then save as Android phone supported audio format.

The following is a step by step guide on how to convert video to Android phone format. This guide is also applied to converting audio to Android supported format.

Step 1 Run Android Converter

Free download the professional Android Converter – Bigasoft Total Video Converter (Windows Version ,Mac Version ) install and run it.

http://www.bigasoft.com/total-video-converter.html

Step 2 Import video to Android Converter

Click the “Add File” button to import your video which you want to play on Android phone. Or simply drag and drop video to the Android Converter.

Step 3 Set Android phone format

Click the drop-down button on the right side of the “Profile” button to select Android phone format like Gphone MPEG4 Video (*.mp4) .

Step 4 Customize (Optional)

The ideal Android Converter also provides some advanced functions for you to edit your video before converting the video to Android phone format.

Trim” function is for you to select the clips you want to convert.

Crop” function is for you to cut off the black edges of the original movie video and watch in full screen on your Android phone.

Preference” function is for you to set output effects, image type, CPU usage and action after conversion done.

Settings” function is for you to set parameters of your output files such as frame rate, resolution, channels, sample rate, video /audio codec, video/audio bitrates, etc.

You can also join several chapters into one by checking “Merge into one file” box.

You can drag and drop the folder where your video files are in to the Android Converter by checking “Copy Folder Structure” box.

You can output the converted video to source folder by checking “Output to Source Folder “.

Step 5 Convert video to Android phone format

Click the “Start” button to finish convert video to Android format.

Step 6 Transfer the converted video to Android phone

Connect Android phone to your PC or Mac, then transfer the converted video to Android phone.

Tips

What is Android? Android is a mobile operating system initially developed by Android Inc., a firm purchased by Google in 2005. Android is an open source mobile phone platform based on the Linux operating system. As a flagship participant in the Open Handset Alliance (OHA), Android operating system can be installed by all the members from the Open Handset Alliance including Google, HTC, Dell, Intel, Motorola, Qualcomm, Texas Instruments, Samsung, LG, T-Mobile, Nvidia, and Wind River Systems and more.

Android phones Android phones refer to phones that use Android as a mobile operating system including HTC, Samsung, Motorola, LG, Sony Ericsson, Acer Inc, Garmin, HKC, Dell, Huawei, Lenovo, Pantech and more. Usually, Android phones support H.263, H.264 (in 3GP or MP4 container), and MPEG-4 SP video format. If you want to play AVI, Xvid, DivX, MKV, WMV, RM, FLV, SWF, ASF, MPG, MOV, MPEG, MPG, HD, MTS, M2TS, TS in Android phone, you need to convert them to Android phone format like MP4, 3GP.

Why choose Android phone Android phone includes various phone models, and different phone model has its specific features. But they also have common features which make Android phone more competitive.
Android phone can run multiple apps at the same time whether they are system apps or apps from the Android Marketplace. At this respect, Android phone is even more competitive than iPhone OS which does offer limited multitasking, but only allows native applications such as Mail, iPod and Phone to run in the background.

 


More Android Articles

Android, Catch the Wave of the Future!

Posted by Max On August - 15 - 2010 ADD COMMENTS

Android, Catch the Wave of the Future!

Android isn’t just for cellphones anymore. Which means that there will come a day when Android is more important than the iPhone, more important than Windows, and more important than any one device.

Android is an open source operating system created by Google for primary use on smartphones, and is currently in use on many cellphones such as the Motorola Droid, the HTC Droid Eris, the HTC Hero, the HTC Desire, the MyTouch 3G Slide, and the Dell Streak.

Recently there’s been a developer release of the Android operating system for use on the x86 archictecture, which will eventually allow Android to be ported to tablets, netbooks and even onto laptops and desktops, as well as onto many other devices, such as set-top boxes, video game systems, home control systems and other things not even thought of yet.

Android is written in Java on a modified version of the Linux kernel. Because of its open architecture, it’s easy for developers to build applications to run on the Android operating system. Unlike the Apple closed architecture, with its draconian gatekeepers, anyone capable of coding can write an application to run on Android. And if Google’s rules are followed, that application will be made available to all Android users.

What that means to you is that if you want your cellphone to do something it doesn’t currently do, and there isn’t an Android application that does it, you have the ability to contract with a developer to have an application built that will allow your cellphone to do exactly what you want, though there are also developer groups who, if the idea is a great one, may take your project on in exchange for the ability to put their name on it and offer servicing and customization of that application, which is the way open source works. The sky is the limit!

As of this writing there are approximately two Android phones activated per second. Because Android is offered on so many great phones, with many new ones to be launched soon, it won’t be long before Android phones hold a greater market share than any other operating system on any other phone, including the iPhone, especially since the Android 2.2 Froyo release supports Adobe Flash, a sticking point with the iPhone and other cellphones. Android 2.2 Froyo is right now being rolled out to the Nexus One, and will soon be available for most other Android phones.

Sergey Brin and Steve Horowitz discuss the availability of the SDK, that it will be open source in the future, and demo applications on the Android platform.
Video Rating: 4 / 5

More Android Articles

Samsung Behold II: T-Mobile

Posted by Max On November - 15 - 2009 5 COMMENTS
Hey, look! Someone forked Android again. The Samsung Behold II, going on sale next week at T-Mobile for $229.99, will be T-Mobile’s most powerful Google Android phone when it goes on the market. But this Android phone doesn’t look or work like other Android phones, and that may be a minus.

samsung-behold-2-1There’s nothing wrong with dressing up Android. HTC did it brilliantly with the Hero and Droid Eris. But Samsung slapped their TouchWiz interface on here, which feels awkward at times.

The Behold II has solid, good-looking hardware. Like so many other phones nowadays, it’s a slab with a big touch screen and a bunch of buttons at the bottom. There’s a four-way cursor rocker instead of a trackball or optical mouse. The screen is a super-bright AMOLED panel with great color. On the plastic back, there’s a stylized map of the world.

One of the physical buttons activates the Behold II’s weirdest UI touch, the “cube.” The cube is an entirely pointless 3D graphic that lets you go to YouTube, the Amazon MP3 store, the music player, the video player, the Web browser or the picture gallery. If you shake the phone, the cube spins until it picks a random selection. It looks like somebody’s demo of their 3D graphics acceleration technology. It’s entirely silly.

You can ignore the Cube, but you can’t ignore all the other things Samsung has done to Android. Samsung dropped a bunch of buttons and menus on here to make the Behold II work and act like their other TouchWiz non-smartphones, devices like the Samsung Rogue and Highlight. That means a “quick list” button that pops up a very non-smartphone-looking menu grid. The standard Android apps drawer pops out of the side of the screen.

Here’s what Samsung decided to add: A new, much better camera app. A new camcorder app. A new music player , with a CoverFlow-like thing going on. A new and pointlessly ugly SMS app. New Exchange e-mail, but everybody does that with Android 1.5. New and uglier on-screen keyboard. New memo pad app, photo gallery, dialer, call log, video player. I could go on.

I’m not saying the changes here are all bad, but there sure are a lot of them, and they’re not as obviously positive as HTC’s changes were. Some UI elements and images seem rougher and less-finished even than the stock Android seen on the Samsung Moment for Sprint. For instance, I can’t figure out why they changed the dialer, and the stock Android dialer is nicer. The camera app, on the other hand, looks more like other Samsung cameraphones, and has lots of options.

Want to judge for yourself? Check out our slideshow which includes a UI comparison between the Behold II and Samsung Moment.

Beyond the new UI, the Behold II has a 5-megapixel camera and a pretty standard Qualcomm 528-MHz ARM11 processor, the same one that’s in the G1 and the MyTouch 3G . I’m not expecting any big performance surprises from this phone. But given that the G1 and MyTouch 3G are both a big step behind Sprint’s and Verizon’s Android phones in power, the Behold may be the leading Android choice for T-Mobile. We’ll see.

We’ll have a full review of the Behold II soon.

Dell’s Global Mini 3

Posted by Max On November - 14 - 2009 ADD COMMENTS

dell_mini_3Dell is launching its Android-based Mini 3 smartphone in China and Brazil. The global strategy seems questionable at face value, but contains a flash of genius as well. Tony Bradley

Dell unveiled the Android-based Mini 3 smartphone today and announced that it will be available soon in China and Brazil. Venturing away from the familiar server and desktop foundation that Dell is built on may seem risky, but there is a method to Dell’s madness that may just pay off.

The Dell Mini 3 may not impress on paper, but if it can capture the China market Dell will emerge victorious.Ever since rumors began to circulate earlier this year that Dell was planning a move into smartphones there have been naysayers. The market is crowded. Competition is rough. Dell is already losing ground in its core business. If your device isn’t from Apple and doesn’t say ‘iPhone’ it can’t succeed in the smartphone market.

Dell has tried to expand its portfolio of hardware over the years, distributing printers, cameras, PDA’s, televisions, and other Dell-branded peripherals. Those efforts have been met with mixed success, and even the best of them has been received moderately at best. The message to Dell for the most part has been ‘don’t quit your day job.’

The move by Dell into smartphones is not a desperate hail-mary, though, but a calculated strategy. A mobile phone is no longer just a mobile phone, it is a mobile computing device. The Mini 3 is not so much a branch into a new direction as it is a natural evolution of Dell’s core market.

The flip side this evolution is Nokia. Nokia has built its reputation as a provider of mobile devices. However, it too sees the writing on the wall in terms of the future of mobile computing which is why it has developed the Booklet 3G netbook. Dell and Nokia are coming at the problem from two different sides and meeting somewhere in the middle.

Why China then? If Dell wants to get into the smartphone market, why not launch the Mini 3 in the United States? With devices like the Motorola Droid, HTC Droid Eris, and Samsung Behold II the Android platform is taking the industry by storm and Dell could ride that wave of Android popularity.

Perhaps the better question to ask though is “why not China?” In the United States the total mobile phone market is around 270 million and Dell would have to engage in an exclusive distribution arrangement that would limit the market to less than 90 million.

Verizon and AT&T may dominate the mobile provider market in the United States, but from a global perspective they are the big fish in a small pond. China Mobile alone has a subscriber base nearly double the entire United States market. América Móvil, the parent of the provider Dell will be distributed through in Brazil, has more subscribers than Verizon and AT&T combined.

Some, like my PC World peer Jared Newman, have suggested that perhaps Dell is avoiding the United States market because the Mini 3 is underwhelming and Dell knows it would flop. The Mini 3 may not compare well on paper with other whiz bang smartphones in the United States, like the iPhone or the Droid, but Asia uses its mobile devices differently. I don’t know if you’ve noticed, but the iPhone hasn’t exactly been flying off the shelves since it launched in China.

As much as we like our gadgets, users in Europe and Asia are actually more demanding when it comes to mobile devices. Users in China expect to be able to order food from vending machines and pay for parking from their mobile phones.

It does seem risky for Dell, a brand established on servers and desktops, to dive into a highly competitive market like smartphones. At face value it may seem questionable to avoid launching in the United States. But, if Dell can carve a niche for the Mini 3 in a market like China it doesn’t need to try to be the next iPhone killer in the United States.

Dell’s Mini 3 strategy seems a little crazy. But, if it works Dell will be crazy like a fox and laughing all the way to the bank.

    Copyright © 2009 WiredGlitz.com