Saturday, February 06, 2010

Live Wallpaper Tips

With the introduction of live wallpapers in Android 2.1, you can now enjoy richer, animated, interactive backgrounds on your home screen. A Live Wallpaperlive wallpaper is very similar to a normal Android application and has access to all the facilities of the platform: SGL (2D drawing), OpenGL (3D drawing), GPS, accelerometers, network access, etc. The live wallpapers included on Nexus One demonstrate the use of some of these APIs to create fun and interesting user experiences. For instance, the Grass wallpaper uses the phone's location to compute sunrise and sunset times in order to display the appropriate sky.

But if you are not satisfied with the default wallpapers provided, then you can always create your own. And in case you are wondering how to do that, here are some tips.

Creating your own live wallpaper is easy, especially if you have used SurfaceView or Canvas. To learn how to create a live wallpaper, you should check out the CubeLiveWallpaper sample provided with the Android 2.1 SDK; you will find it in the directory platforms/android-2.1/samples/CubeLiveWallpaper.

A live wallpaper is very similar to a regular Android service. The only difference is the addition of a new method, onCreateEngine() whose goal is to create a WallpaperService.Engine. The engine is responsible for handling the lifecycle and the drawing of a wallpaper. The system provides you with a surface on which you can draw, just like you would with a SurfaceView. Drawing a wallpaper can be very expensive so you should optimize your code as much as possible to avoid using too much CPU, not only for battery life but also to avoid slowing down the rest of the system. That is also why the most important part of the lifecycle of a wallpaper is when it becomes invisible. When invisible, for instance because the user launched an application that covers the home screen, a wallpaper must stop all activity.

The engine can also implement several methods to interact with the user or the home application. For instance, if you want your wallpaper to scroll along when the user swipes from one home screen to another, you can use onOffsetsChanged(). To react to touch events, simply implement onTouchEvent(MotionEvent). Finally, applications can send arbitrary commands to the live wallpaper.

Currently, only the standard home application sends commands to the onCommand() method of the live wallpaper:

* android.wallpaper.tap: When the user taps an empty space on the workspace. This command is interpreted by the Nexus and Water live wallpapers to make the wallpaper react to user interaction. For instance, if you tap an empty space on the Water live wallpaper, new ripples appear under your finger.
* android.home.drop: When the user drops an icon or a widget on the workspace. This command is also interpreted by the Nexus and Water live wallpapers.

Please note that live wallpaper is an Android 2.1 feature. To ensure that only users with devices that support this feature can download your live wallpaper, remember to add the following to your manifest before releasing to Android Market:
* <uses-sdk android:minSdkVersion="7" />, which lets Android Market and the platform know that your application is using the Android 2.1 version.
* <uses-feature android:name="android.software.live_wallpaper" />, which lets the Android Market and the platform know that your application is a live wallpaper.

If you do create your own Live Wallpaper, don't forget to let me know through the comments here. And also, don't forget to subscribe to my RSS feed.

4 Comment:

prognosis autism said...

Found your blog while googling. Enjoyed reading it , consider me as frequent visitor

Anonymous said...

Hi, I was wondering if there was a way to show a RSS feed in the wallpaper?

Anonymous said...

Whats the name of the Live wallpaper u have on display and could u by any chance direct me to few links where i might be able to download it from?

free essay said...

There is no reason not to follow your heart.

Post a Comment

Blog comment guideline