The Game Mode API allows you to optimize your game for the best performance or
longest battery life when the user selects the corresponding game mode.
Alternatively, you can submit requests for
Game Mode interventions
to improve
the performance of games that are no longer being updated by developers.
The Game Mode API and interventions are available on:
Each game may implement the Game Mode API behavior, propose Game Mode
interventions settings to OEMs, or
opt out of Game Mode interventions
.
Setup
To use the Game Mode API in your game, do the following:
Download and install the
Android 13 SDK
.
In the
AndroidManifest.xml
file,
declare your app as a game by setting the
appCategory
attribute in the
<application>
element:
android:appCategory="game"
- Query the current game mode by adding this to your main activity:
Java
// Only call this for Android 12 and higher devices
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ) {
// Get GameManager from SystemService
GameManager gameManager = Context.getSystemService(GameManager.class);
// Returns the selected GameMode
int gameMode = gameManager.getGameMode();
}
Kotlin
// Only call this for Android 12 and higher devices
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// Get GameManager from SystemService
val gameManager: GameManager? = context.getSystemService(Context.GAME_SERVICE) as GameManager?
// Returns the selected GameMode
val gameMode = gameManager?.gameMode
}
Supported game mode
|
Description
|
UNSUPPORTED
|
The game does not declare support for the Game Mode API and it does not support Game Mode interventions.
|
STANDARD
|
The user has not selected a game mode or the user selected standard mode.
|
PERFORMANCE
|
Provides the lowest latency frame rates in exchange for reduced battery life and fidelity.
|
BATTERY
|
Provides the longest possible battery life in exchange for reduced fidelity or frame rates.
|
Add code to query the game mode state in the
onResume
function:
Best Practices
If your game already supports multiple fidelity and frame rate
targets, you should identify the appropriate settings for performance and
battery saver modes:
To consistently achieve the maximum device frame rates: consider slight
reductions in fidelity to achieve higher frame rates.
To improve battery life: consider choosing a lower display refresh rate (e.g.
30Hz or 60Hz) and
use frame pacing
to target the
reduced rate.
For high-fidelity games such as first-person shooters, multiplayer online
battle arenas (MOBAs), and role-playing games (RPGs), you should focus on
achieving high consistent frame rates to maximize user immersion.
For both high-fidelity and casual games, you should support battery saver mode
to lengthen playtime by reducing your peak frame rates.
Declare support for Game Modes
To declare support for Game Modes and override any Game Mode interventions by
OEMs, first add the Game Mode configuration to the
<application>
element in your
AndroidManifest.xml
file:
<application>
<meta-data android:name="android.game_mode_config"
android:resource="@xml/game_mode_config" />
...
</application>
Then create a
game_mode_config.xml
file in your project's
res/xml/
directory
with the following contents:
<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
xmlns:android="http://schemas.android.com/apk/res/android"
android:supportsBatteryGameMode="true"
android:supportsPerformanceGameMode="true"
/>
Switch Game Modes
To switch between the game modes, you can use the Game Dashboard (available on
Pixel devices) or similar applications provided by OEMs. Alternatively you can
use the Game Mode shell command during development.
If you are using Game Dashboard and the
optimisation
icon does not display
when your game launches, you may need to upload your app to Google Play Console
and install it through the Play Store. For information about app testing in the
Play Store, see
Share app bundles and APKs internally
.
Figure 1.
Game Dashboard shown overlaying the running game on a Pixel
device.
In figure 1, the running game's Game Mode can be changed from the Optimisation
widget. As shown on the widget, the game is currently running on
PERFORMANCE
mode.
During development, if you are using a device without Game Dashboard and the
manufacturer does not provide any way to set Game Mode for each app, you can
change the Game Mode status through
adb
:
adb shell cmd game mode [standard|performance|battery] <PACKAGE_NAME>
Sample Application
The
Game Mode API sample
highlights how you can optimize FPS and render resolution caps to save approximately 25% power in your apps.
Next
Read
Game Mode Interventions
to improve a game's performance when it isn't possible to provide game updates.