1page.title=Building TV Games
2page.tags=tv, games, controller
3helpoutsWidget=true
4page.image=images/games/game-controller-buttons_2x_crop.png
5page.metaDescription=How to bring your games to Android TV, including recommendations and examples.
6page.article=true
7
8@jd:body
9
10<div id="qv-wrapper">
11<div id="qv">
12  <h2>In this document</h2>
13  <ol>
14    <li><a href="#display">Display</a></li>
15    <li><a href="#control">Input Devices</a></li>
16    <li><a href="#manifest">Manifest</a></li>
17    <li><a href="#gpgs">Google Play Game Services</a></li>
18    <li><a href="#web">Web</a></li>
19  </ol>
20</div>
21</div>
22
23<p>
24  The television screen presents a number of considerations that may be new to mobile game
25  developers. These areas include its large size, its control scheme, and the fact that all players
26  are viewing it simultaneously.
27</p>
28
29
30<h2 id="display">Display</h2>
31<p>
32  The two main things to keep in mind when developing games for the TV screen are its nature as a
33  shared display and the need to design your game for a landscape orientation.
34</p>
35
36
37<h3 id="shared-display">Consider the shared display</h3>
38
39<p>
40  A living-room TV poses design challenges for multiplayer games, in that all players can see
41  everything. This issue is especially relevant to games (such as card games or strategy games)
42  that rely on each player’s possession of hidden information.
43</p>
44
45<p>
46  Some mechanisms you can implement to address the problem of one player’s eavesdropping on
47  another’s information are:
48</p>
49
50<ul>
51  <li>A blinder on the screen to help conceal information. For example, in a turn-based game like a
52    word or card game, one player at a time might view the display. When the player finishes a move,
53    the game allows him or her to cover the screen with a blinder that blocks anyone from viewing
54    secret information. When the next player begins a turn, the blinder opens to reveal his or her
55    own information.
56  </li>
57  <li>A companion app, running on a phone or tablet, can enable a player to conceal information by
58    serving as a second screen.
59  </li>
60</ul>
61
62
63<h3 id="landscape-display">Support landscape display</h3>
64
65<p>
66  A TV is always sideways: You can’t turn it, and there is no portrait orientation. Always design
67  your TV games to be displayed in landscape mode.
68</p>
69
70
71<h2 id="control">Input Devices</h2>
72
73<p>
74  TVs don't have touch interfaces, so it's even more important to get your controls right and make
75  sure players find them intuitive and fun to use. Handling controllers
76  also introduces some other issues to pay attention to, like keeping track of multiple
77  controllers, and handling disconnects gracefully.
78</p>
79
80<h3 id="d-pad">Support D-pad controls</h3>
81
82<p>
83  Plan your control scheme around a directional pad (D-pad) control, since this control set is the
84  default for Android TV devices. The player needs to be able to use a D-Pad in all aspects of the
85  game&mdash;not just controlling core gameplay, but also navigating menus and ads. For this reason, you
86  should also ensure that your Android TV game does not refer to a touch interface. For example, an
87  Android TV game should not tell a player to "<em>Tap</em> here to continue."
88</p>
89
90<p>
91  How you shape the player's interaction with the controller can be key to achieving a great user
92  experience:
93</p>
94
95<ul>
96  <li>
97    <strong>Communicate Controller Requirements up Front</strong>. Use your Google Play description
98    to communicate to the player any expectations about controllers. If a game is better suited to
99    a gamepad with a joystick than one with only a D-pad, make this fact clear. A player who uses
100    an ill-suited controller for a game is likely to have a subpar experience and penalize your
101    game in the ratings.
102  </li>
103  <li>
104    <strong>Use Consistent Button Mapping</strong>. Intuitive and flexible button mapping is key
105    to a good user experience. For example, you should adhere to accepted customs by using the A button
106    to <em>Accept</em>, and the B button to <em>Cancel</em>. You can also offer flexibility
107    in the form of remappability. For more information about button mapping, see <a href=
108    "http://developer.android.com/training/game-controllers/controller-input.html">Handling
109    Controller Actions</a>.
110  </li>
111  <li>
112    <strong>Detect Controller Capabilities and Adjust Accordingly</strong>. Query the controller
113    about its capabilities in order to optimize the match between controller and game. For example,
114    you may intend for a player to steer an object by waving the controller in the air. If a
115    player's controller lacks accelerometer and gyroscope hardware, however, waving will not work.
116    So, your game should query the controller and if motion detection is not
117    supported, switch over to an alternative, available control scheme. For more information
118    about querying controller capabilities, see <a href=
119    "http://developer.android.com/training/game-controllers/compatibility.html">Supporting
120    Controllers Across Android Versions</a>.
121  </li>
122</ul>
123
124
125<h3 id="back-button">Provide appropriate Back-button behavior</h3>
126
127<p>
128  The Back button should never act as a toggle. For example, do not use it to both open and close a
129  menu. It should only navigate backward, breadcrumb-style, through the previous screens the player
130  has been on, for example: Game play &gt; Game pause screen &gt; Game main screen &gt; Android
131  home screen.
132</p>
133
134<p>
135  Since the Back button should only perform linear (backward) navigation, you may use the back
136  button to leave an in-game menu (opened by a different button) and return to gameplay. For more
137  information about design for navigation, see <a href=
138  "http://developer.android.com/design/patterns/navigation.html">Navigation with Back and Up</a>.
139  To learn about implementation, refer to <a href=
140  "http://developer.android.com/training/implementing-navigation/temporal.html">Providing Proper
141  Back Navigation</a>.
142</p>
143
144
145<h3 id="button-independence">Use appropriate buttons</h3>
146
147<p>Not all game controllers provide Start, Search, or Menu buttons. Be sure your UI does not depend
148upon the use of these buttons.</p>
149
150<h3 id="multiple-controllers">Handle multiple controllers</h3>
151
152<p>
153  When multiple players are playing a game, each with his or her own controller, it is important to
154  map each player-controller pair. For information about how to implement controller-number
155  identification, see <a href=
156  "http://developer.android.com/reference/android/view/InputDevice.html#getControllerNumber">Input
157  Devices</a>.
158</p>
159
160
161<h3 id="handle-disconnect">Handle controller disconnects</h3>
162
163<p>
164  When a controller is disconnected in the middle of gameplay, the game should pause, and a dialog
165  should appear prompting the disconnected player to reconnect his or her controller.
166</p>
167
168<p>
169  The dialog should also offer troubleshooting tips (for example, a pop-up dialog telling the
170  player to "Check your Bluetooth connection"). For more information about implementing input-device
171  support, see <a href=
172  "http://developer.android.com/training/game-controllers/controller-input.html">Handling Controller
173  Actions</a>. Specific information about Bluetooth connections is at <a href=
174  "http://developer.android.com/guide/topics/connectivity/bluetooth.html">Bluetooth</a>.
175</p>
176
177
178<h3 id="ControllerHelp">Show controller instructions</h3>
179
180<p>If your game provides visual game control instructions, the
181controller image should be free of branding and include only <a
182href="{@docRoot}training/game-controllers/controller-input.html#button"
183>buttons compatible with Android</a>.</p>
184
185<p>For sample images of an Android-compatible controller, download the
186<a href="http://storage.googleapis.com/androiddevelopers/design/android_tv_gamepad_template-2014-10.zip"
187>Android TV Gamepad Template (ZIP)</a>.
188It includes a white controller on black background and a black controller on white background
189(shown in figure 1), as a PNG file and an Adobe&reg; Illustrator&reg; file.</p>
190
191<img itemprop="image" src="{@docRoot}images/games/game-controller-buttons_2x.png" width="700"
192     srcset="{@docRoot}images/games/game-controller-buttons_2x.png 2x,
193             {@docRoot}images/games/game-controller-buttons.png 1x" />
194<p class="img-caption"><b>Figure 1.</b> Example controller instructions using the
195<a href="http://storage.googleapis.com/androiddevelopers/design/android_tv_gamepad_template-2014-10.zip"
196>Android TV Gamepad Template (ZIP)</a>.
197
198
199
200
201<h2 id="manifest">Manifest</h2>
202
203<p>There are a some special things games should include in the Android manifest.</p>
204
205<h3 id="Launcher">Show your game on the home screen</h3>
206<p>
207  The Android TV home screen displays games in a separate row from regular apps.
208  To make your game appear in the list of games, set the
209  <a href="{@docRoot}guide/topics/manifest/application-element.html#isGame">
210  {@code android:isGame}</a> attribute to <code>"true"</code> in your app manifest's
211  <a href="{@docRoot}guide/topics/manifest/application-element.html"><code>&lt;application&gt;</code>
212  </a> tag. For example:
213</p>
214
215<pre class="fragment">
216&lt;application
217    ...
218    android:isGame="true"
219    ...
220&gt;
221</pre>
222
223
224<h3 id="gamepad">Declare support for game controllers</h3>
225
226<p>
227  Games controllers may not be available or active for users of a TV device. In order to properly
228  inform users that your game requires (or just supports) a game controller, you must include
229  entries in the app manifest. If your game requires a game controller, you must include the
230  following entry in your app manifest:
231</p>
232
233<pre>
234  &lt;uses-feature android:name="android.hardware.gamepad"/&gt;
235</pre>
236
237<p>
238  If your game uses, but does not require, a game controller, include the following feature
239  entry in your app manifest:
240</p>
241
242<pre>
243  &lt;uses-feature android:name="android.hardware.gamepad" android:required="false"/&gt;
244</pre>
245
246<p>For more information about manifest entries, see
247  <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">App Manifest</a>.
248</p>
249
250
251<h2 id="gpgs">Google Play Game Services</h2>
252
253<p>
254  If your game integrates <a
255  href="https://developers.google.com/games/services/">Google Play Game services</a>,
256  you should keep in mind a number of
257  considerations pertaining to achievements, sign-in, saving games, and multiplayer play.
258</p>
259
260
261<h3 id="achievements">Achievements</h3>
262
263<p>
264  Your game should include at least five (earnable) achievements. Only a user controlling gameplay
265  from a supported input device should be able to earn achievements. For more information about
266  achievements and how to implement them, see <a href=
267  "https://developers.google.com/games/services/android/achievements">Achievements in Android</a>.
268</p>
269
270
271<h3 id="sign-in">Sign-in</h3>
272
273<p>
274  Your game should attempt to sign the user in on launch. If the player declines sign-in several
275  times in a row, your game should stop asking. Learn more about sign-in at <a href=
276  "https://developers.google.com/games/services/training/signin">Implementing Sign-in on
277  Android</a>.
278</p>
279
280
281<h3 id="saving">Saving</h3>
282
283<p>
284  Use Google Play Services <a href=
285  "https://developers.google.com/games/services/common/concepts/savedgames">Saved Games</a> to store
286  your game save. Your game should bind game saves to a specific Google account, so as to be
287  uniquely identifiable even across devices: Whether the player is using a handset or a TV, the
288  game should be able to pull the game-save information from the same user account.
289</p>
290
291<p>
292  You should also provide an option in your game's UI to allow the player to delete locally and
293  cloud-stored data. You might put the option in the game's <code>Settings</code> screen. For
294  specifics on implementing saved games using Play Services, see <a href=
295  "https://developers.google.com/games/services/android/savedgames">Saved Games in Android</a>.
296</p>
297
298
299<h3 id="multiplayer-ux">Multiplayer experience</h3>
300
301<p>
302  A game offering a multiplayer experience must allow at least two players to enter a room. For
303  further information about multiplayer games in Android, see the <a href=
304  "https://developers.google.com/games/services/android/realtimeMultiplayer">Real-time
305  Multiplayer</a> and <a href="">Turn-based Multiplayer</a> documentation on the Android developer
306  site.
307</p>
308
309<h3 id="exit">Exit</h3>
310
311<p>Provide a consistent and obvious UI element that lets the user exit the game gracefully. This
312element should be accessible with the D-pad navigation buttons. Do this instead of relying on the
313Home button to provide an exit, as that is not consistent nor reliable across different controllers.</p>
314
315
316<h2 id="web">Web</h2>
317
318<p>
319  Do not enable web browsing in games for Android TV. Android TV does not support a web browser.
320</p>
321
322<p class="note">
323  <strong>Note:</strong> You can use the {@link android.webkit.WebView} class for logins to
324  services like Google+ and Facebook.
325</p>
326
327<h2 id="networking">Networking</h2>
328
329<p>Games frequently need greater bandwidth to provide optimum performance, and many users prefer
330ethernet to WiFi to provide that performance. Your app should check for both WiFi and ethernet
331connections. If your app is for TV only, you do not need to check for 3G/LTE service as you would
332for a mobile app.</p>
333