uso superado samsung restringir reiniciar reducir quitar prime moviles limite desactivar datos consumo como aplicaciones advertencia android android-download-manager network-traffic user-preferences android-settings

android - superado - reiniciar uso de datos samsung



¿Cómo obtener programáticamente el límite de uso de datos establecido por el usuario en la configuración del sistema operativo Android? (2)

¿Desea obtener un valor límite (5 GB) y un valor de advertencia (2 GB) en este ejemplo?

Si es así, puede obtener limitBytes y warningBytes con el siguiente código, si puede usar android.permission.MANAGE_NETWORK_POLICY y android.permission.READ_PHONE_STATE.
Sin embargo, android.permission.MANAGE_NETWORK_POLICY protectionLevel es una firma.

NetworkPolicyManager manager = (NetworkPolicyManager) getSystemService("netpolicy"); NetworkPolicy[] networkPolicies = manager.getNetworkPolicies(); Log.d("NetworkPolicy", "limitBytes is " + networkPolicies[0].limitBytes); Log.d("NetworkPolicy", "warningBytes is " + networkPolicies[0].warningBytes);

(Las clases NetworkPolicyManager y NetworkPolicy son clases ocultas)

El usuario puede definir en la pantalla Uso de datos un límite limitado y / o un límite de advertencia para el uso de datos móviles. Entonces, ¿cómo puedo obtener esta información por código?

Pantalla de configuración de Uso de Datos del SO nativo.

Quiero el valor límite y el valor de advertencia.

Ya lo he intentado pero no funciona y siempre devuelve NULL a ambos:

final Long recommendedBytes = DownloadManager.getRecommendedMaxBytesOverMobile( this.context ); final Long maximumBytes = DownloadManager.getMaxBytesOverMobile( this.context ); // recommendedBytes and maximumBytes are NULL

Y la clase TrafficStats solo transfiere los datos, no los límites.


Después de días buscando e investigando sobre este problema, no pude encontrar una respuesta para eso. Abajo voy a levantar cada intento que hice.

1. Gestor de descargas

Con esta clase puede comenzar a descargar en cualquier estado de red o dispositivo y manejará todos los estados, por ejemplo, pérdida de red, reinicio de dispositivo, etc.

Hay dos métodos llamados getMaxBytesOverMobile y getRecommendedMaxBytesOverMobile , que eran un getRecommendedMaxBytesOverMobile candidato para resolver este problema a la primera. Pero después de las pruebas de código y la investigación de implementación de Download Manager , descubrí que no hay forma de obtener esos valores con DownloadManager.

Razón

Estos métodos invocan Settings.Secure.getLong junto con sus respectivas etiquetas Settings.Secure.DOWNLOAD_MAX_BYTES_OVER_MOBILE y Settings.Secure.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE en el turno hace una llamada a un perezoso String NameValueCache interior de NameValueCache interior.

Ok, hasta ahora, pero ninguna de las clases internas o la implementación de la Settings es de uso propio DOWNLOAD_MAX_BYTES_OVER_MOBILE o DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE dentro.

Consideré que el mapa perezoso estaba poblado por una tercera entidad, lo que realmente sucede, así que encontré la clase interna Settings NameValueTable que maneja los nuevos valores para el mapa perezoso. El putString es una llamada de método protected por Settings.Secure y Settings.System clases internas (llamadas de Secure y System ).

Así que podría concluir que si la implementación del sistema operativo no pone esos valores de cadena no puedo obtenerlos.

2. TrafficStats

Solo con un rápido vistazo a la referencia oficial, noté que no me servirá porque esta clase solo proporciona la cantidad de bytes y paquetes que fueron objeto de tráfico desde el último arranque del dispositivo.

TrafficStats

3. NetworkPolicyManager y NetworkPolicy

Como @bina publicó aquí, ambas clases están ocultas y no pueden ser utilizadas por aplicaciones normales, por ejemplo, que se publicarán en Google Play.

https://.com/a/24445424/575643

4. ConnectivityManager

En resumen, solo puede obtener NetworkInfo que no proporciona mucha información sobre las preferencias del usuario (¡en realidad ninguna!). Solo proporcione información sobre la red y, por ejemplo, el proveedor de la red móvil.

ConnectivityManager

Después de todo, asumo que no hay manera de obtener esta información hoy en día. Por favor si lo lees y encuentras una manera de publicar aquí!

Gracias por todo.

PS .: Perdón por los errores ingleses.