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.
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
ygetRecommendedMaxBytesOverMobile
, que eran ungetRecommendedMaxBytesOverMobile
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 etiquetasSettings.Secure.DOWNLOAD_MAX_BYTES_OVER_MOBILE
ySettings.Secure.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE
en el turno hace una llamada a un perezosoString
NameValueCache
interior deNameValueCache
interior.Ok, hasta ahora, pero ninguna de las clases internas o la implementación de la
Settings
es de uso propioDOWNLOAD_MAX_BYTES_OVER_MOBILE
oDOWNLOAD_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. ElputString
es una llamada de métodoprotected
porSettings.Secure
ySettings.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.
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
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.
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.