Im Laufe der Lebensdauer eines Smartphones können die Kosten für einen Datentarif die Kosten für das Gerät selbst übersteigen. Android 7.0 (API-Level 24) und können Nutzer den Datensparmodus für das gesamte Gerät aktivieren, die Datennutzung ihrer Geräte zu optimieren und sie zu reduzieren. Diese Fähigkeit besonders nützlich beim Roaming gegen Ende des Abrechnungszeitraums, oder ein kleines Prepaid-Datenpaket.
Wenn ein Nutzer den Datensparmodus in den Einstellungen aktiviert und das Gerät wird in einem kostenpflichtigen Netzwerk die Nutzung von Hintergrunddaten und Signale blockiert. Apps so oft wie möglich die Datennutzung im Vordergrund reduzieren. Nutzer können bestimmten Apps erlauben, die gemessene Datennutzung im Hintergrund zu nutzen, auch wenn Der Energiesparmodus ist aktiviert.
Android 7.0 (API-Level 24) erweitert die
ConnectivityManager
Ein API, mit dem Apps die Daten des Nutzers abrufen können
Einstellungen für den Energiesparmodus und Überwachungseinstellungen
Änderungen. Es hat sich bewährt, für Apps zu prüfen, ob die
Nutzer hat den Datensparmodus aktiviert und versucht,
die Nutzung von Hintergrunddaten.
Einstellungen für Datensparmodus prüfen
Unter Android 7.0 (API-Level 24) und höher können Apps die
ConnectivityManager
-API
um zu ermitteln, welche Einschränkungen bei der Datennutzung angewendet werden. Die
getRestrictBackgroundStatus()
gibt einen der folgenden Werte zurück:
-
RESTRICT_BACKGROUND_STATUS_DISABLED
- Der Datensparmodus ist deaktiviert.
-
RESTRICT_BACKGROUND_STATUS_ENABLED
- Der Nutzer hat den Datensparmodus für diese App aktiviert. Apps sollten versuchen, die Datennutzung zu begrenzen Nutzung im Vordergrund und reibungslose Bewältigung von Hintergrundeinschränkungen Datennutzung.
-
RESTRICT_BACKGROUND_STATUS_WHITELISTED
- Der Nutzer hat den Datensparmodus aktiviert, die App darf diesen aber umgehen. Apps sollten dennoch versuchen, die Nutzung von Daten im Vorder- und Hintergrund zu begrenzen.
Begrenzen Sie die Datennutzung, wenn das Gerät mit einem kostenpflichtigen Netzwerk verbunden ist, auch wenn der Datensparmodus aktiviert ist.
deaktiviert ist oder die App sie umgehen darf. Im folgenden Beispielcode wird
ConnectivityManager.isActiveNetworkMetered()
und ConnectivityManager.getRestrictBackgroundStatus()
, um festzulegen, wie viele Daten
App verwenden sollte:
Kotlin
(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply { // Checks if the device is on a metered network if (isActiveNetworkMetered) { // Checks user’s Data Saver settings. when (restrictBackgroundStatus) { RESTRICT_BACKGROUND_STATUS_ENABLED -> { // Background data usage is blocked for this app. Wherever possible, // the app should also use less data in the foreground. } RESTRICT_BACKGROUND_STATUS_WHITELISTED -> { // The app is allowed to bypass Data Saver. Nevertheless, wherever possible, // the app should use less data in the foreground and background. } RESTRICT_BACKGROUND_STATUS_DISABLED -> { // Data Saver is disabled. Since the device is connected to a // metered network, the app should use less data wherever possible. } } } else { // The device is not on a metered network. // Use data as required to perform syncs, downloads, and updates. } }
Java
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // Checks if the device is on a metered network if (connMgr.isActiveNetworkMetered()) { // Checks user’s Data Saver settings. switch (connMgr.getRestrictBackgroundStatus()) { case RESTRICT_BACKGROUND_STATUS_ENABLED: // Background data usage is blocked for this app. Wherever possible, // the app should also use less data in the foreground. case RESTRICT_BACKGROUND_STATUS_WHITELISTED: // The app is allowed to bypass Data Saver. Nevertheless, wherever possible, // the app should use less data in the foreground and background. case RESTRICT_BACKGROUND_STATUS_DISABLED: // Data Saver is disabled. Since the device is connected to a // metered network, the app should use less data wherever possible. } } else { // The device is not on a metered network. // Use data as required to perform syncs, downloads, and updates. }
Hinweis:Dieses Verhalten ist bei Android TV anders. Anstelle von
die Hintergrundnutzung blockiert, wird sie nur von Android TV gedrosselt. Wenn im
Apps im Vordergrund sind auf 800 Kbit/s beschränkt.
Anwendungen sind auf 10 Kbit/s beschränkt. Verwenden Sie
ConnectivityManager.isActiveNetworkMetered()
, um zu erkennen, wann
die Datennutzung auf dem Fernseher einschränken.
Berechtigungen zur Dateneinschränkung anfordern
Wenn deine App Daten im Hintergrund verwenden muss, kann sie Daten anfordern
Einschränkungsberechtigungen, indem Sie eine
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
Intent mit einem URI des Paketnamens Ihrer App, z. B.
package:MY_APP_ID
.
Durch Senden des Intents und des URI wird die App Settings gestartet und zeigt die Datennutzungseinstellungen für Ihre App an. Der Nutzer kann dann entscheiden, um Hintergrunddaten für deine App zu aktivieren. Bevor Sie diesen Intent senden, sollten Sie die Nutzenden zunächst fragen, ob sie die Einstellungen zum Aktivieren von Hintergrunddaten Nutzung.
Änderungen an den Einstellungen für den Datensparmodus überwachen
Apps können Änderungen an den Einstellungen für den Datensparmodus überwachen, indem ein
BroadcastReceiver
bis
auf ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
warten und dynamisch
Registrierung des Empfängers bei
Context.registerReceiver()
Wenn eine App diese Nachricht empfängt, sollte sie überprüfen, ob der neue Datensparmodus
auf die Berechtigungen auswirken
ConnectivityManager.getRestrictBackgroundStatus()
Hinweis:Das System sendet diese Nachricht nur an Apps, die sich dynamisch für
mit
Context.registerReceiver()
Apps, die sich für den Empfang dieser Übertragung in ihrem Manifest registrieren, empfangen sie nicht.
Mit Android Debug Bridge-Befehlen testen
Android Debug Bridge (ADB) enthält einige Befehle, mit denen Sie Ihre App im Datensparmodus testen können . Sie können das Netzwerk prüfen und konfigurieren oder lege drahtlose Netzwerke als "kostenpflichtig" fest, um deine App auf kostenlosen Netzwerken.
-
$ adb shell dumpsys netpolicy
- Erstellt einen Bericht, der das aktuelle globale Hintergrundnetzwerk enthält Einstellung der Einschränkung, Paket-UIDs, die derzeit den Datensparmodus umgehen dürfen, und Netzwerkberechtigungen anderer bekannter Pakete.
-
$ adb shell cmd netpolicy
- Zeigt eine vollständige Liste der Befehle von Network Policy Manager (netpolicy) an.
-
$ adb shell cmd netpolicy set restrict-background <boolean>
-
Aktiviert oder deaktiviert den Datensparmodus bei der Übergabe von
true
oderfalse
. -
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
-
Fügt die angegebene Paket-UID der Zulassungsliste (
whitelist
) hinzu, um Hintergrundinformationen zuzulassen gemessene Datennutzung. -
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
-
Entfernt die angegebene Paket-UID aus der Zulassungsliste (
whitelist
) zum Blockieren gemessene Datennutzung im Hintergrund, während der Datensparmodus aktiviert ist. -
$ adb shell cmd netpolicy list wifi-networks
- Listet alle WLANs auf und gibt an, ob sie kostenpflichtig sind.
-
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
- Legt das WLAN mit der angegebenen SSID als "kostenpflichtig" fest, sodass Sie eine getaktetes Netzwerk in einem kostenpflichtigen Netzwerk.