Les appareils Android sans solde de données autorisent le trafic réseau, ce qui oblige les opérateurs et les opérateurs télécoms à implémenter des protocoles d'atténuation. Android implémente une solution générique qui permet aux opérateurs et aux opérateurs télécoms d'indiquer quand un appareil a atteint son solde maximal.
La plate-forme Android fournit une application opérateur par défaut avec un comportement par défaut pour la mitigation du trafic en fonction du signal de détection du portail captif. Il permet également aux opérateurs et aux OEM de personnaliser le comportement à moindre coût et avec une grande flexibilité.
Exemples et source
L'application de l'opérateur par défaut se trouve à l'emplacementplatform/frameworks/base/packages/CarrierDefaultApp/.
Implémentation
L'application par défaut de l'opérateur est configurée pour offrir une meilleure expérience aux opérateurs non configurés. Les opérateurs peuvent utiliser ce comportement par défaut. Ils peuvent également remplacer le comportement par défaut en ajoutant des mappages de signal-action au fichier XML de configuration du transporteur. Ils peuvent choisir de ne pas utiliser l'application par défaut et d'utiliser plutôt les droits d'accès UICC avec leur propre application de l'opérateur autonome.
Introduction à l'implémentation
Signals
Le framework Android permet de configurer des actions pour les signaux paramétrés suivants:
TelephonyIntents.ACTION_CARRIER_SIGNAL_REDIRECTED
TelephonyIntents.ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED
Ces signaux se trouvent dans frameworks/base/telephony/java/com/android/internal/telephony/TelephonyIntents.java
.
Actions autorisées
L'application du transporteur par défaut définit un ensemble d'actions compatibles qui peuvent être mappées sur des signaux compatibles. Ils sont définis dans CarrierActionUtils.java
:
public static final int CARRIER_ACTION_ENABLE_METERED_APNS = 0; public static final int CARRIER_ACTION_DISABLE_METERED_APNS = 1; public static final int CARRIER_ACTION_DISABLE_RADIO = 2; public static final int CARRIER_ACTION_ENABLE_RADIO = 3; public static final int CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION = 4; public static final int CARRIER_ACTION_SHOW_NO_DATA_SERVICE_NOTIFICATION = 5; public static final int CARRIER_ACTION_CANCEL_ALL_NOTIFICATIONS = 6;
Remarque:Si un opérateur implémente sa propre application autonome, il peut prendre en charge d'autres signaux que ceux mentionnés dans cette section. Ils peuvent également définir et configurer leurs propres actions.
Mappages par défaut des signaux et des actions
Pour configurer les actions par défaut, procédez comme suit:
- Définissez une clé pour les signaux compatibles.
Les mappages par défaut des signaux aux actions sont définis dans
CarrierConfigManager.java
. Chacun des signaux compatibles est associé à une clé:public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY = "carrier_default_actions_on_redirection_string_array"; public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY = "carrier_default_actions_on_dcfailure_string_array";
- Associez des actions par défaut aux touches de signal.
Les ID d'action par défaut sont associés aux clés de signal:
sDefaults.putStringArray(KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY, new String[]{ "1, 4" //1: CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION // 4: CARRIER_ACTION_DISABLE_METERED_APNS });
Le framework de téléphonie mappe ces actions aux signaux correspondants.
Remplacer les actions par défaut
Vous pouvez définir des actions personnalisées pour les signaux compatibles dans le fichier XML de configuration du transporteur en associant des ID d'action aux clés de signal (définies dans CarrierConfigManager.java
). Par exemple, la mise en correspondance suivante désactive les APN limités et affiche une notification de portail lors de la redirection:
<string-array name="carrier_default_actions_on_redirection_string_array" num="2"> <item value="1" /> <item value="4" /> </string-array>
Le framework de téléphonie charge ces configurations et remplace les actions par défaut.
Validation
Il n'existe aucun test CTS, CTS Verifier ou GTS pour cette fonctionnalité.
Utilisez ces tests de validation manuels pour valider la fonctionnalité:
- Valider la notification de signal de déséquilibre de l'appareil de l'opérateur
- Vérifiez la limitation de la redirection du trafic en cas d'état déséquilibré et de Wi-Fi désactivé.
- Vérifiez que le trafic réseau est réduit et que l'UI de notification s'affiche lorsque l'état est hors équilibre.
- Valider la fonction d'appel vocal/VoLTE en cas de solde négatif
- Vérifiez que les appels vidéo sont bloqués en cas de déséquilibre.
- Lorsque le Wi-Fi est activé, vérifiez que l'utilisateur peut continuer à naviguer sur le Web et que le trafic de navigation n'active pas le trafic réseau lorsqu'il est en état de déséquilibre.
- Validez les fonctions Wi-Fi, WFC et Bluetooth en cas de déséquilibre.
- Désactivez le Wi-Fi. Vérifiez l'interface utilisateur de la notification d'imbalancement et que le trafic de navigation ordinaire n'est pas redirigé vers le site Web d'enregistrement de l'opérateur. Vérifiez que le clic sur le lien dans l'UI de la notification redirige le navigateur vers le site Web d'enregistrement de l'opérateur.
- Vérifiez que l'activation du mode Avion ne réinitialise pas l'état de limitation du trafic.
- Vérifiez que le remplacement d'une carte SIM en service réinitialise l'état du trafic réseau.
- Vérifiez que la réinsertion de la carte SIM en déséquilibre redémarre la redirection du trafic et rétablit le débit du trafic réseau.
- Vérifiez que le redémarrage du téléphone réactive la redirection et rétablit la limitation du trafic et l'UI de notification.
- Appuyez sur la notification "captiveportal". Vérifiez qu'une connexion réseau restreinte est établie pour permettre à l'utilisateur d'ajouter des crédits.
- Vérifiez que le rechargement ou la réactivation du solde de la carte SIM entraîne la reprise du trafic du réseau mobile, et que le lien avec l'opérateur et la notification d'absence de solde disparaissent.
- Test de validité après la récupération du service de données.
L'application par défaut fournit quelques exemples de tests unitaires et un script pour les exécuter (voir tests/runtest.sh
). Lorsque vous implémentez une version ou un comportement personnalisés, vous devez refléter ces personnalisations dans des tests unitaires dédiés.