Netzwerkdatennutzung optimieren

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 oder false.
$ 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.