am 54504966: Merge "some fixes to TV App quality and TV games doc. add section to TV Games doc about controller instructions w/ template download. clarify use of <meta-data> tag and standardize headings per Training conventions." into lmp-dev

* commit '545049665ce3b1cd5a8da44963f849e23aca4412':
  some fixes to TV App quality and TV games doc. add section to TV Games doc about controller instructions w/ template download. clarify use of <meta-data> tag and standardize headings per Training conventions.
This commit is contained in:
smain@google.com
2014-10-23 07:55:12 +00:00
committed by Android Git Automerger
4 changed files with 75 additions and 44 deletions

View File

@@ -234,7 +234,7 @@ page.image=/distribute/images/gp-tv-quality.png
</td>
<td>
<p style="margin-bottom:.5em;">
App does not depend on a remote controller having a menu button to access user interface
App does not depend on a remote controller having a Menu button to access user interface
controls.
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
</p>
@@ -291,8 +291,8 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
App manifest sets an intent type of {@code ACTION_MAIN} with category
{@code CATEGORY_LEANBACK_LAUNCHER}.
App manifest sets an intent type of {@link android.content.Intent#ACTION_MAIN} with category
{@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER}.
(<a href="{@docRoot}training/tv/start/start.html#tv-activity">Learn how</a>)
</p>
</td>
@@ -321,8 +321,9 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
If the app requires a game controller, the app manifest sets the {@code uses-feature} setting
{@code android.hardware.gamepad} to {@code required="true"}.
If the app uses a game controller as it's primary input method, it declares the appropriate
requirement with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"
>{@code &lt;uses-feature>}</a> manifest tag.
(<a href="{@docRoot}training/tv/games/index.html#gamepad">Learn how</a>)
</p>
</td>
@@ -334,9 +335,9 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
If the app provides user instructions for use of game controllers, the instructions
do not include a controller with any branding.
(<a href="{@docRoot}training/tv/games/index.html#generic-controllers">Learn how</a>)
If the app provides visual instructions for using game controllers, the instructions should
be free of branding and show a compatible button layout.
(<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">Learn how</a>)
</p>
</td>
</tr>
@@ -351,7 +352,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
App enables interaction with any advertising using D-pad controls.
App allows interaction with advertising using D-pad controls.
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
</p>
</td>
@@ -363,7 +364,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
For advertising that uses full-screen, non-video ads, the app allows the user to
For advertising that uses fullscreen, non-video ads, the app allows the user to
immediately dismiss the ad with D-pad controls.
</p>
</td>
@@ -375,7 +376,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
For advertising that uses clickable, non-full screen, non-video ads, the app does not allow
For advertising that uses clickable, non-fullscreen, non-video ads, the app does not allow
ads to link to a web URL.
</p>
</td>
@@ -387,7 +388,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
For advertising that uses clickable, non-full screen, non-video ads, the app does not allow
For advertising that uses clickable, non-fullscreen, non-video ads, the app does not allow
ads to link to another app that is not available on TV devices.
</p>
</td>

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@@ -31,7 +31,7 @@ page.article=true
</p>
<h3 id="shared-display">Shared display</h3>
<h3 id="shared-display">Consider the shared display</h3>
<p>
A living-room TV poses design challenges for multiplayer games, in that all players can see
@@ -57,7 +57,7 @@ page.article=true
</ul>
<h3 id="landscape-display">Landscape display</h3>
<h3 id="landscape-display">Support landscape display</h3>
<p>
A TV is always sideways: You cant turn it, and there is no portrait orientation. Always design
@@ -69,19 +69,19 @@ page.article=true
<p>
TVs don't have touch interfaces, so it's even more important to get your controls right and make
sure that players find them intuitive and fun to use. The separation of controller from device
also introduces some other issues to pay attention to, like keeping track of multiple players'
sure players find them intuitive and fun to use. Handling controllers
also introduces some other issues to pay attention to, like keeping track of multiple
controllers, and handling disconnects gracefully.
</p>
<h3 id="d-pad">D-pad</h3>
<h3 id="d-pad">Support D-pad controls</h3>
<p>
Plan your control scheme around a directional pad (D-pad) control, since this control set is the
default for Android TV devices. The player needs to be able to use a D-Pad in all aspects of the
gamenot just controlling core gameplay, but also navigating menus and ads. For this reason, you
should also ensure that your Android TV game does not refer to a touch interface: For example, an
Android TV game should not tell a player to <strong>Tap here to skip</strong>.
game&mdash;not just controlling core gameplay, but also navigating menus and ads. For this reason, you
should also ensure that your Android TV game does not refer to a touch interface. For example, an
Android TV game should not tell a player to "<em>Tap</em> here to continue."
</p>
<p>
@@ -91,35 +91,35 @@ page.article=true
<ul>
<li>
<strong>Communicate Controller Requirements up Front</strong> - Use your Play Store description
<strong>Communicate Controller Requirements up Front</strong>. Use your Google Play description
to communicate to the player any expectations about controllers. If a game is better suited to
a gamepad with a joystick than one with only a D-pad, make this fact clear. A player who uses
an ill-suited controller for a game is likely to have a subpar experienceand penalize your
an ill-suited controller for a game is likely to have a subpar experience and penalize your
game in the ratings.
</li>
<li>
<strong>Use Consistent Button Mapping</strong> - Intuitive and flexible button mapping is key
to a good user experience. For example, you can adhere to accepted custom by using the A button
to <code>Accept</code>, and the B button to <code>Cancel</code>. You can also offer flexibility
in the form of remappability. For more information on button mapping, see <a href=
<strong>Use Consistent Button Mapping</strong>. Intuitive and flexible button mapping is key
to a good user experience. For example, you should adhere to accepted customs by using the A button
to <em>Accept</em>, and the B button to <em>Cancel</em>. You can also offer flexibility
in the form of remappability. For more information about button mapping, see <a href=
"http://developer.android.com/training/game-controllers/controller-input.html">Handling
Controller Actions</a>.
</li>
<li>
<strong>Detect Controller Capabilities and Adjust Accordingly</strong> - Query the controller
<strong>Detect Controller Capabilities and Adjust Accordingly</strong>. Query the controller
about its capabilities in order to optimize the match between controller and game. For example,
you may intend for a player to steer an object by waving the controller in the air. If a
player's controller lacks accelerometer and gyroscope hardware, however, waving will not work.
When, however, your game queries the controller and discovers that motion detection is not
supported, it can switch over to an alternative, available control scheme. For more information
on querying controller capabilities, see <a href=
So, your game should query the controller and if motion detection is not
supported, switch over to an alternative, available control scheme. For more information
about querying controller capabilities, see <a href=
"http://developer.android.com/training/game-controllers/compatibility.html">Supporting
Controllers Across Android Versions</a>.
</li>
</ul>
<h3 id="back-button">Back-button behavior</h3>
<h3 id="back-button">Provide appropriate Back-button behavior</h3>
<p>
The Back button should never act as a toggle. For example, do not use it to both open and close a
@@ -139,18 +139,18 @@ page.article=true
</p>
<h3 id="multiple-controllers">Handling multiple controllers</h3>
<h3 id="multiple-controllers">Handle multiple controllers</h3>
<p>
When multiple players are playing a game, each with his or her own controller, it is important to
map each player-controller pair. For information on how to implement controller-number
map each player-controller pair. For information about how to implement controller-number
identification, see <a href=
"http://developer.android.com/reference/android/view/InputDevice.html#getControllerNumber">Input
Devices</a>.
</p>
<h3 id="handle-disconnect">Handling disconnects</h3>
<h3 id="handle-disconnect">Handle controller disconnects</h3>
<p>
When a controller is disconnected in the middle of gameplay, the game should pause, and a dialog
@@ -159,7 +159,7 @@ page.article=true
<p>
The dialog should also offer troubleshooting tips (for example, a pop-up dialog telling the
player to "Check your Bluetooth connection"). For more information on implementing input-device
player to "Check your Bluetooth connection"). For more information about implementing input-device
support, see <a href=
"http://developer.android.com/training/game-controllers/controller-input.html">Handling Controller
Actions</a>. Specific information about Bluetooth connections is at <a href=
@@ -167,25 +167,53 @@ page.article=true
</p>
<h3 id="ControllerHelp">Show controller instructions</h3>
<p>If your game provides visual game control instructions, the
controller image should be free of branding and include only <a
href="{@docRoot}training/game-controllers/controller-input.html#button"
>buttons compatible with Android</a>.</p>
<p>For sample images of an Android-compatible controller, download the
<a href="http://storage.googleapis.com/androiddevelopers/design/android_tv_gamepad_template-2014-10.zip"
>Android TV Gamepad Template (ZIP)</a>.
It includes a white controller on black background and a black controller on white background
(shown in figure 1), as a PNG file and an Adobe&reg; Illustrator&reg; file.</p>
<img src="{@docRoot}images/games/game-controller-buttons_2x.png" width="700"
srcset="{@docRoot}images/games/game-controller-buttons_2x.png 2x,
{@docRoot}images/games/game-controller-buttons.png 1x" />
<p class="img-caption"><b>Figure 1.</b> Example controller instructions using the
<a href="http://storage.googleapis.com/androiddevelopers/design/android_tv_gamepad_template-2014-10.zip"
>Android TV Gamepad Template (ZIP)</a>.
<h2 id="manifest">Manifest</h2>
<p>There are a some special things games should include in the Android manifest.</p>
<h3 id="Launcher">Show your game in the launcher</h3>
<p>
The Android TV launcher home screen displays games in a separate row from regular apps. The TV
framework uses the <code>android:isGame</code> manifest attribute to differentiate games from
non-game apps. Set this value to <code>true</code> in your game's app manifest, as shown in the
following code example:
The Android TV launcher home screen displays games in a separate row from regular apps.
To make your game appear in the list of games, add the
<a href="{@docRoot}guide/topics/manifest/meta-data-element.html"
><code>&lt;meta-data></code></a> tag in your app manifest with <code>android:name</code>
set to <code>"isGame"</code> and <code>android:value</code>
set to <code>"true"</code>. For example:
</p>
<pre class="fragment">
&lt;application&gt;
...
&lt; meta-data android:name="isGame" android:value="true" &gt;
&lt;meta-data android:name="isGame" android:value="true" &gt;
...
&lt;/application&gt;
</pre>
<h3 id="gamepad">Game Controllers</h3>
<h3 id="gamepad">Declare support for game controllers</h3>
<p>
Games controllers may not be available or active for users of a TV device. In order to properly
@@ -215,7 +243,9 @@ page.article=true
<h2 id="gpgs">Google Play Game Services</h2>
<p>
If your game integrates Google Play Game Services, you should keep in mind a number of
If your game integrates <a
href="https://developers.google.com/games/services/">Google Play Game services</a>,
you should keep in mind a number of
considerations pertaining to achievements, sign-in, saving games, and multiplayer play.
</p>
@@ -224,7 +254,7 @@ page.article=true
<p>
Your game should include at least five (earnable) achievements. Only a user controlling gameplay
from a supported input device should be able to earn achievements. For more information on
from a supported input device should be able to earn achievements. For more information about
achievements and how to implement them, see <a href=
"https://developers.google.com/games/services/android/achievements">Achievements in Android</a>.
</p>
@@ -262,7 +292,7 @@ page.article=true
<p>
A game offering a multiplayer experience must allow at least two players to enter a room. For
further information on multiplayer games in Android, see the <a href=
further information about multiplayer games in Android, see the <a href=
"https://developers.google.com/games/services/android/realtimeMultiplayer">Real-time
Multiplayer</a> and <a href="">Turn-based Multiplayer</a> documentation on the Android developer
site.