Koszt abonamentu na komórkową transmisję danych w miarę eksploatacji smartfona może się okazać przewyższa koszt samego urządzenia. Na Androidzie 7.0 (poziom interfejsu API 24) i użytkownicy mogą włączyć Oszczędzanie danych na całym urządzeniu, zoptymalizować użycie danych i zużywać mniej danych. Ta umiejętność przydaje się zwłaszcza w roamingu pod koniec cyklu rozliczeniowego. lub mały przedpłacony pakiet danych.
Gdy użytkownik włączy Oszczędzanie danych w Ustawieniach, a urządzenie zostanie w sieci z pomiarem użycia danych system blokuje przesyłanie danych w tle i sygnały aby aplikacje zużywały mniej danych na pierwszym planie, gdy tylko jest to możliwe. Użytkownicy mogą zezwalaj określonym aplikacjom na korzystanie z transmisji danych w tle z pomiarem użycia danych, nawet jeśli Oszczędzanie jest włączone.
Android 7.0 (poziom interfejsu API 24) rozszerza
ConnectivityManager
Interfejs API umożliwiający aplikacjom pobieranie danych użytkownika
Ustawienia oszczędzania i preferencje monitorowania
zmian. Zalecaną praktyką dla aplikacji jest sprawdzanie, czy
włączył Oszczędzanie danych i starał się ograniczyć
i użycie danych w tle.
Sprawdzanie ustawień oszczędzania danych
W Androidzie 7.0 (poziom interfejsu API 24) i nowszych aplikacje mogą używać
Interfejs API ConnectivityManager
w celu określenia, jakie ograniczenia użytkowania danych są stosowane.
getRestrictBackgroundStatus()
zwraca jedną z następujących wartości:
-
RESTRICT_BACKGROUND_STATUS_DISABLED
- Oszczędzanie danych jest wyłączone.
-
RESTRICT_BACKGROUND_STATUS_ENABLED
- Użytkownik włączył w tej aplikacji Oszczędzanie danych. Aplikacje powinny ograniczać ilość danych wykorzystanie na pierwszym planie i płynnie radzi sobie z ograniczeniami w tle. transmisji danych.
-
RESTRICT_BACKGROUND_STATUS_WHITELISTED
- Użytkownik włączył Oszczędzanie danych, ale aplikacja może je pominąć. Aplikacje nadal powinny starać się ograniczać użycie danych na pierwszym planie i w tle.
Ograniczaj użycie danych, gdy urządzenie jest podłączone do sieci z pomiarem użycia danych, nawet jeśli Oszczędzanie danych jest włączone
jest wyłączona lub aplikacja może go ominąć. Następujący przykładowy kod korzysta z:
ConnectivityManager.isActiveNetworkMetered()
i ConnectivityManager.getRestrictBackgroundStatus()
, aby określić ilość danych
aplikacja powinna używać:
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. }
Uwaga: w przypadku Androida TV działa to inaczej. Zamiast
Blokując dostęp w tle, Android TV ogranicza tę liczbę. W strefie
na pierwszym planie aplikacje są ograniczone do 800 Kb/s, a gdy działają w tle,
ograniczenie do 10 Kb/s. Używaj
ConnectivityManager.isActiveNetworkMetered()
, aby wykryć, kiedy należy
i ograniczaj transmisję danych na telewizorze.
Poproś o uprawnienia do ograniczenia dostępu do danych
Jeśli aplikacja potrzebuje danych w tle, może prosić o te dane
możesz ograniczyć uprawnienia, wysyłając wiadomość
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
intencja zawierająca identyfikator URI nazwy pakietu aplikacji: na przykład
package:MY_APP_ID
Wysłanie intencji i identyfikatora URI powoduje uruchomienie aplikacji Settings (Ustawienia) oraz wyświetla ustawienia użycia danych przez aplikację. Użytkownik może wtedy zdecydować, czy aby włączyć dane w tle dla aplikacji. Przed wysłaniem intencji warto najpierw zapytać użytkownika, czy chce uruchomić Ustawienia. i ich wykorzystaniu.
Monitorowanie zmian w ustawieniach oszczędzania danych
Aplikacje mogą monitorować zmiany w ustawieniach Oszczędzania danych, tworząc
BroadcastReceiver
do
nasłuchuj przez ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
i dynamicznie
rejestrując odbiornik w
Context.registerReceiver()
Gdy aplikacja otrzyma tę transmisję, powinna sprawdzić, czy nowe Oszczędzanie danych
ustawienia wpływają na jego uprawnienia, wywołując
ConnectivityManager.getRestrictBackgroundStatus()
Uwaga: system wysyła ten komunikat tylko do aplikacji, które dynamicznie rejestrują się
im z
Context.registerReceiver()
Aplikacje, które mają w swoim manifeście dostęp do tej transmisji, nie otrzymają jej.
Testowanie za pomocą poleceń Android Debug Bridge
Android Debug Bridge (ADB) udostępnia kilka poleceń, których możesz użyć do przetestowania aplikacji w Oszczędzaniu danych warunków. Możesz sprawdzić i skonfigurować sieć lub ustaw sieci bezprzewodowe jako z pomiarem użycia danych, aby przetestować aplikację sieci.
-
$ adb shell dumpsys netpolicy
- Generuje raport, który uwzględnia bieżącą globalną sieć w tle UID w pakietach, które mogą omijać zabezpieczenia Oszczędzania danych, oraz uprawnień sieciowych innych znanych pakietów.
-
$ adb shell cmd netpolicy
- Wyświetla pełną listę poleceń menedżera zasad sieciowych (netpolicy).
-
$ adb shell cmd netpolicy set restrict-background <boolean>
-
Włącza i wyłącza tryb Oszczędzanie danych po przekroczeniu progu
true
lubfalse
. -
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
-
Dodaje określony identyfikator UID pakietu do listy dozwolonych (
whitelist
), aby umożliwić działanie w tle z pomiarem użycia danych. -
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
-
Usuwa określony identyfikator UID pakietu z listy dozwolonych (
whitelist
) do zablokowania z pomiarem użycia danych w tle, gdy włączone jest Oszczędzanie danych. -
$ adb shell cmd netpolicy list wifi-networks
- Wyświetla listę wszystkich sieci Wi-Fi wraz z informacją, czy są one używane z pomiarem użycia danych.
-
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
- Ustawia sieć Wi-Fi o określonym identyfikatorze SSID jako z pomiarem użycia danych, co pozwala symulować z pomiarem użycia danych w sieci bez pomiaru.