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>
|
||||||
<td>
|
<td>
|
||||||
<p style="margin-bottom:.5em;">
|
<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.
|
controls.
|
||||||
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
|
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
|
||||||
</p>
|
</p>
|
||||||
@@ -291,8 +291,8 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p style="margin-bottom:.5em;">
|
<p style="margin-bottom:.5em;">
|
||||||
App manifest sets an intent type of {@code ACTION_MAIN} with category
|
App manifest sets an intent type of {@link android.content.Intent#ACTION_MAIN} with category
|
||||||
{@code CATEGORY_LEANBACK_LAUNCHER}.
|
{@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER}.
|
||||||
(<a href="{@docRoot}training/tv/start/start.html#tv-activity">Learn how</a>)
|
(<a href="{@docRoot}training/tv/start/start.html#tv-activity">Learn how</a>)
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
@@ -321,8 +321,9 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p style="margin-bottom:.5em;">
|
<p style="margin-bottom:.5em;">
|
||||||
If the app requires a game controller, the app manifest sets the {@code uses-feature} setting
|
If the app uses a game controller as it's primary input method, it declares the appropriate
|
||||||
{@code android.hardware.gamepad} to {@code required="true"}.
|
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>)
|
(<a href="{@docRoot}training/tv/games/index.html#gamepad">Learn how</a>)
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
@@ -334,9 +335,9 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p style="margin-bottom:.5em;">
|
<p style="margin-bottom:.5em;">
|
||||||
If the app provides user instructions for use of game controllers, the instructions
|
If the app provides visual instructions for using game controllers, the instructions should
|
||||||
do not include a controller with any branding.
|
be free of branding and show a compatible button layout.
|
||||||
(<a href="{@docRoot}training/tv/games/index.html#generic-controllers">Learn how</a>)
|
(<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">Learn how</a>)
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -351,7 +352,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p style="margin-bottom:.5em;">
|
<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>)
|
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
@@ -363,7 +364,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p style="margin-bottom:.5em;">
|
<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.
|
immediately dismiss the ad with D-pad controls.
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
@@ -375,7 +376,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p style="margin-bottom:.5em;">
|
<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.
|
ads to link to a web URL.
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</td>
|
||||||
@@ -387,7 +388,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p style="margin-bottom:.5em;">
|
<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.
|
ads to link to another app that is not available on TV devices.
|
||||||
</p>
|
</p>
|
||||||
</td>
|
</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>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="shared-display">Shared display</h3>
|
<h3 id="shared-display">Consider the shared display</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
A living-room TV poses design challenges for multiplayer games, in that all players can see
|
A living-room TV poses design challenges for multiplayer games, in that all players can see
|
||||||
@@ -57,7 +57,7 @@ page.article=true
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="landscape-display">Landscape display</h3>
|
<h3 id="landscape-display">Support landscape display</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
A TV is always sideways: You can’t turn it, and there is no portrait orientation. Always design
|
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>
|
<p>
|
||||||
TVs don't have touch interfaces, so it's even more important to get your controls right and make
|
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
|
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 players'
|
also introduces some other issues to pay attention to, like keeping track of multiple
|
||||||
controllers, and handling disconnects gracefully.
|
controllers, and handling disconnects gracefully.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 id="d-pad">D-pad</h3>
|
<h3 id="d-pad">Support D-pad controls</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Plan your control scheme around a directional pad (D-pad) control, since this control set is the
|
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
|
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
|
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
|
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>.
|
Android TV game should not tell a player to "<em>Tap</em> here to continue."
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -91,35 +91,35 @@ page.article=true
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<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
|
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
|
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.
|
game in the ratings.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<strong>Use Consistent Button Mapping</strong> - Intuitive and flexible button mapping is key
|
<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 a good user experience. For example, you should adhere to accepted customs by using the A button
|
||||||
to <code>Accept</code>, and the B button to <code>Cancel</code>. You can also offer flexibility
|
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 on button mapping, see <a href=
|
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
|
"http://developer.android.com/training/game-controllers/controller-input.html">Handling
|
||||||
Controller Actions</a>.
|
Controller Actions</a>.
|
||||||
</li>
|
</li>
|
||||||
<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,
|
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
|
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.
|
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
|
So, your game should query the controller and if motion detection is not
|
||||||
supported, it can switch over to an alternative, available control scheme. For more information
|
supported, switch over to an alternative, available control scheme. For more information
|
||||||
on querying controller capabilities, see <a href=
|
about querying controller capabilities, see <a href=
|
||||||
"http://developer.android.com/training/game-controllers/compatibility.html">Supporting
|
"http://developer.android.com/training/game-controllers/compatibility.html">Supporting
|
||||||
Controllers Across Android Versions</a>.
|
Controllers Across Android Versions</a>.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="back-button">Back-button behavior</h3>
|
<h3 id="back-button">Provide appropriate Back-button behavior</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
The Back button should never act as a toggle. For example, do not use it to both open and close a
|
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>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="multiple-controllers">Handling multiple controllers</h3>
|
<h3 id="multiple-controllers">Handle multiple controllers</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
When multiple players are playing a game, each with his or her own controller, it is important to
|
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=
|
identification, see <a href=
|
||||||
"http://developer.android.com/reference/android/view/InputDevice.html#getControllerNumber">Input
|
"http://developer.android.com/reference/android/view/InputDevice.html#getControllerNumber">Input
|
||||||
Devices</a>.
|
Devices</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="handle-disconnect">Handling disconnects</h3>
|
<h3 id="handle-disconnect">Handle controller disconnects</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
When a controller is disconnected in the middle of gameplay, the game should pause, and a dialog
|
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>
|
<p>
|
||||||
The dialog should also offer troubleshooting tips (for example, a pop-up dialog telling the
|
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=
|
support, see <a href=
|
||||||
"http://developer.android.com/training/game-controllers/controller-input.html">Handling Controller
|
"http://developer.android.com/training/game-controllers/controller-input.html">Handling Controller
|
||||||
Actions</a>. Specific information about Bluetooth connections is at <a href=
|
Actions</a>. Specific information about Bluetooth connections is at <a href=
|
||||||
@@ -167,25 +167,53 @@ page.article=true
|
|||||||
</p>
|
</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>
|
<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>
|
<p>
|
||||||
The Android TV launcher home screen displays games in a separate row from regular apps. The TV
|
The Android TV launcher home screen displays games in a separate row from regular apps.
|
||||||
framework uses the <code>android:isGame</code> manifest attribute to differentiate games from
|
To make your game appear in the list of games, add the
|
||||||
non-game apps. Set this value to <code>true</code> in your game's app manifest, as shown in the
|
<a href="{@docRoot}guide/topics/manifest/meta-data-element.html"
|
||||||
following code example:
|
><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>
|
</p>
|
||||||
|
|
||||||
<pre class="fragment">
|
<pre class="fragment">
|
||||||
<application>
|
<application>
|
||||||
...
|
...
|
||||||
< meta-data android:name="isGame" android:value="true" >
|
<meta-data android:name="isGame" android:value="true" >
|
||||||
...
|
...
|
||||||
</application>
|
</application>
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="gamepad">Game Controllers</h3>
|
<h3 id="gamepad">Declare support for game controllers</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Games controllers may not be available or active for users of a TV device. In order to properly
|
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>
|
<h2 id="gpgs">Google Play Game Services</h2>
|
||||||
|
|
||||||
<p>
|
<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.
|
considerations pertaining to achievements, sign-in, saving games, and multiplayer play.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -224,7 +254,7 @@ page.article=true
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Your game should include at least five (earnable) achievements. Only a user controlling gameplay
|
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=
|
achievements and how to implement them, see <a href=
|
||||||
"https://developers.google.com/games/services/android/achievements">Achievements in Android</a>.
|
"https://developers.google.com/games/services/android/achievements">Achievements in Android</a>.
|
||||||
</p>
|
</p>
|
||||||
@@ -262,7 +292,7 @@ page.article=true
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
A game offering a multiplayer experience must allow at least two players to enter a room. For
|
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
|
"https://developers.google.com/games/services/android/realtimeMultiplayer">Real-time
|
||||||
Multiplayer</a> and <a href="">Turn-based Multiplayer</a> documentation on the Android developer
|
Multiplayer</a> and <a href="">Turn-based Multiplayer</a> documentation on the Android developer
|
||||||
site.
|
site.
|
||||||
|
|||||||
Reference in New Issue
Block a user