blob: 0692a626f766610017675c74d48e89f1eab3f777 [file] [log] [blame]
Dirk Doughertyd323b4c2010-02-08 10:53:12 -08001page.title=Live Wallpapers
Scott Main796ce772011-02-16 10:04:45 -08002parent.title=Articles
3parent.link=../browser.html?tag=article
Dirk Doughertyd323b4c2010-02-08 10:53:12 -08004@jd:body
5
Scott Maina225e3b2010-05-11 17:43:43 -07006
7<div id="qv-wrapper">
8<div id="qv">
9
10 <h2>See also</h2>
11 <ol>
12 <li><a href="{@docRoot}resources/samples/CubeLiveWallpaper/index.html">Live Wallpaper
13sample</a></li>
14 </ol>
15
16</div>
17</div>
18
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080019<p>Starting with Android 2.1 (API Level 7), users can now enjoy <em>live
20wallpapers</em> &mdash; richer, animated, interactive backgrounds &mdash; on
21their home screens. A live wallpaper is very similar to a normal Android
22application and has access to all the facilities of the platform: SGL (2D
23drawing), OpenGL (3D drawing), GPS, accelerometers, network access, etc. The
24live wallpapers included on Nexus One demonstrate the use of some of these APIs
25to create fun and interesting user experiences. For instance, the Grass
26wallpaper uses the phone's location to compute sunrise and sunset times in order
27to display the appropriate sky.</p>
28
29<img src="images/live_wallpapers_small.png" style="align:center" />
30
31<p>Creating your own live wallpaper is easy, especially if you have had
Scott Main13033ea2011-02-15 13:18:30 -080032previous experience with {@link android.view.SurfaceView} or {@link
33android.graphics.Canvas}.
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080034To learn how to create a live wallpaper, you should check out the <a
35href="../samples/CubeLiveWallpaper/index.html">CubeLiveWallpaper sample code</a>.</p>
36
Scott Main13033ea2011-02-15 13:18:30 -080037<p>In terms of implementation, a live wallpaper is very similar to a {@link android.app.Service}.
38The only difference is the addition of a new method, {@link
39android.service.wallpaper.WallpaperService#onCreateEngine()}, whose goal is to create a {@link
40android.service.wallpaper.WallpaperService.Engine}. The engine is responsible for
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080041handling the lifecycle and drawing of a wallpaper. The system provides a surface
Scott Main13033ea2011-02-15 13:18:30 -080042on which you can draw, just like you would with a {@link android.view.SurfaceView}.
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080043Drawing a wallpaper can be very expensive so you should optimize your code
44as much as possible to avoid using too much CPU, not only for battery life
45but also to avoid slowing down the rest of the system. That is also why the
Scott Main13033ea2011-02-15 13:18:30 -080046most important part of the lifecycle of a wallpaper is when it becomes visible, as indicated
47by a call to {@link android.service.wallpaper.WallpaperService.Engine#onVisibilityChanged
48onVisibilityChanged()}.
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080049When invisible, such as when the user launches an application that covers
50the home screen, a wallpaper must stop all activity.</p>
51
52<p>The engine can also implement several methods to interact with the user
53or the home application. For instance, if you want your wallpaper to scroll
Scott Main13033ea2011-02-15 13:18:30 -080054along when the user swipes from one home screen to another, you can use
55{@link android.service.wallpaper.WallpaperService.Engine#onOffsetsChanged
56onOffsetsChanged()}.
57To react to touch events, simply implement {@link
58android.service.wallpaper.WallpaperService.Engine#onTouchEvent onTouchEvent()}.
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080059Finally, applications can send arbitrary commands to the live wallpaper.
Scott Main13033ea2011-02-15 13:18:30 -080060Currently, only the standard home application sends commands to the
61{@link android.service.wallpaper.WallpaperService.Engine#onCommand onCommand()}
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080062method of the live wallpaper:</p>
63
64<ul>
65<li><code>android.wallpaper.tap</code>: When the user taps an empty space
66on the workspace. This command is interpreted by the Nexus and Water live
67wallpapers to make the wallpaper react to user interaction. For instance,
68if you tap an empty space on the Water live wallpaper, new ripples appear
69under your finger.</li>
70<li><code>android.home.drop</code>: When the user drops an icon or a widget
71on the workspace. This command is also interpreted by the Nexus and Water
72live wallpapers.</li>
73</ul>
74
75<p>If you are developing a live wallpaper, remember that the feature is
76supported only on Android 2.1 (API level 7) and higher versions of the platform.
77To ensure that your application can only be installed on devices that support
78live wallpapers, remember to add the following to the application's manifest
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -080079before publishing to Google Play:</p>
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080080
81<ul>
82<li><code>&lt;uses-sdk android:minSdkVersion="7" /&gt;</code>, which indicates
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -080083to Google Play and the platform that your application requires Android 2.1 or
Scott Main13033ea2011-02-15 13:18:30 -080084higher. For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080085Levels</a> and the documentation for the
Scott Main13033ea2011-02-15 13:18:30 -080086<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080087element.</li>
88<li><code>&lt;uses-feature android:name="android.software.live_wallpaper" /&gt;</code>,
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -080089which tells Google Play that your application includes a live wallpaper
90Google Play uses this feature as a filter, when presenting users lists of
91available applications. When you declaring this feature, Google Play
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080092displays your application only to users whose devices support live wallpapers,
93while hiding it from other devices on which it would not be able to run. For
94more information, see the documentation for the
Scott Main13033ea2011-02-15 13:18:30 -080095<a
96href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
97&lt;uses-feature&gt;</a>
Dirk Doughertyd323b4c2010-02-08 10:53:12 -080098element.</li>
99</ul>
100
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800101<p>Many great live wallpapers are already available on Google Play and
Dirk Doughertyd323b4c2010-02-08 10:53:12 -0800102we can't wait to see more!</p>