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
This commit is contained in:
committed by
Android (Google) Code Review
commit
545049665c
@@ -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 <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>
|
||||
|
||||
BIN
docs/html/images/games/game-controller-buttons.png
Normal file
BIN
docs/html/images/games/game-controller-buttons.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
BIN
docs/html/images/games/game-controller-buttons_2x.png
Normal file
BIN
docs/html/images/games/game-controller-buttons_2x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 68 KiB |
@@ -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 can’t 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
|
||||
game–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 <strong>Tap here to skip</strong>.
|
||||
game—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 experience–and 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® Illustrator® 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><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">
|
||||
<application>
|
||||
...
|
||||
< meta-data android:name="isGame" android:value="true" >
|
||||
<meta-data android:name="isGame" android:value="true" >
|
||||
...
|
||||
</application>
|
||||
</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.
|
||||
|
||||
Reference in New Issue
Block a user