Skip to content

Most visited

Recently visited

navigation

Cómo optimizar el uso de datos de red

Durante la vida útil de un smartphone, el costo de un plan de datos móviles puede superar fácilmente el costo del propio dispositivo. A partir de Android 7.0 (nivel de API 24), los usuarios pueden habilitar Reducir datos en todo el dispositivo para optimizar el uso de datos de este y usarlos en menor medida. Esta capacidad es particularmente útil en el modo de itinerancia, cerca del final del ciclo de facturación o para un paquete de datos prepago pequeño.

Cuando un usuario habilita Reducir datos en Settings y el dispositivo está conectado a una red de uso medido, el sistema bloquea el uso de datos en segundo plano y envía señales a las apps para que usen menos datos en primer plano siempre que sea posible. Los usuarios pueden incluir apps específicas en la lista blanca para permitir el uso de datos medidos en segundo plano, incluso cuando está activado Reducir datos.

La N Developer Preview extiende la ConnectivityManager API para que las apps puedan recuperar las preferencias de Reducir datos del usuario y controlar los cambios en las preferencias. Se considera una buena práctica que las apps verifiquen si el usuario habilitó Reducir datos y se esfuercen por reducir el uso de datos en primer y segundo plano.

Verificación de las preferencias de Reducir datos

En la N Developer Preview, las apps pueden usar la ConnectivityManager API para determinar las restricciones de uso de datos que se aplican. Con el método getRestrictBackgroundStatus() se muestra uno de los siguientes valores:

RESTRICT_BACKGROUND_STATUS_DISABLED
Reducir datos está inhabilitado.
RESTRICT_BACKGROUND_STATUS_ENABLED
El usuario habilitó Reducir datos para esta app. Las apps deben esforzarse por reducir el uso de datos en primer plano y manejar correctamente las restricciones para el uso de datos en segundo plano.
RESTRICT_BACKGROUND_STATUS_WHITELISTED
El usuario habilitó Reducir datos, pero la app se encuentra en la lista blanca. Las apps aún deben esforzarse por reducir el uso de datos en primer y segundo plano.

Se considera una buena práctica limitar el uso de datos siempre que el dispositivo esté conectado a una red de uso medido, incluso si Reducir datos está inhabilitado o la app se encuentra en la lista blanca. En el siguiente ejemplo de código se usan ConnectivityManager.isActiveNetworkMetered() y ConnectivityManager.getRestrictBackgroundStatus() para determinar la cantidad de datos que la app debe emplear:

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 whitelisted. 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.
}

Solicitud de permisos de lista blanca

Si la app necesita utilizar datos en segundo plano, esta puede solicitar permisos de lista blanca mediante el envío de una intent Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS que contenga un URI del nombre de paquete de la app, como por ejemplo, package:MY_APP_ID.

Mediante el envío de la intent y el URI, se inicia la app Settings y se muestra la configuración de uso de datos para la app. El usuario luego puede decidir si habilita los datos en segundo plano para tu app. Antes de enviar esta intent, resulta buena práctica consultarle primero al usuario acerca de si desea iniciar la app Settings con el objetivo de habilitar el uso de datos en segundo plano.

Control de cambios en las preferencias de Reducir datos

Las apps pueden controlar los cambios en las preferencias de Reducir datos mediante la creación de un BroadcastReceiver para escuchar ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED y mediante un registro dinámico del receptor con Context.registerReceiver(). Cuando una app recibe esta transmisión, debe verificar si las nuevas preferencias de Reducir datos afectan los permisos; para ello, debe llamar a ConnectivityManager.getRestrictBackgroundStatus().

Nota: El sistema únicamente envía esta transmisión a las apps que se registran de manera dinámica para recibirla con Context.registerReceiver(). Las apps que en su manifiesto registran que la reciben no la recibirán.

Pruebas con comandos de Android Debug Bridge

Android Debug Bridge (ADB) ofrece algunos comandos que puedes usar para probar tu app en condiciones de Reducir datos. Puedes revisar y configurar los permisos de red o establecer redes inalámbricas medidas para probar tu app en redes no medidas.

$ adb shell dumpsys netpolicy
Se genera un informe en el que se incluyen la configuración global actual de restricciones de red en segundo plano, los UID de paquetes que se encuentran actualmente en una lista blanca y los permisos de red de otros paquetes conocidos.
$ adb shell cmd netpolicy
Se muestra una lista completa de los comandos del administrador de políticas de red (políticas de red).
$ adb shell cmd netpolicy set restrict-background <boolean>
Se habilita o inhabilita el modo Reducir datos cuando se asignan los valores true o false, respectivamente.
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
Se agrega el UID del paquete específico a la lista blanca para permitir el uso de datos medidos en segundo plano.
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
Se quita el UID del paquete específico de la lista blanca para bloquear el uso de datos medidos en segundo plano mientras Reducir datos está habilitado.
$ adb shell cmd netpolicy list wifi-networks
Enumera todas las redes Wi-Fi e indica si son medidas.
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
Establece Wi-Fi con el SSID especificado medido, lo cual te permite simular una red medida en una red no medida.
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)