J'ai testé deux récepteurs d'action.
1.
ConnectivityManager.CONNECTIVITY_ACTION;
Il ne peut pas recevoir de données mobiles activées ou désactivées si le wifi est connecté.
2.
TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED = "android.intent.action.ANY_DATA_STATE"
(Il est caché)
Il peut recevoir des données mobiles désactivées si le wifi est connecté. et ne peut pas recevoir de données mobiles.
Mon appareil de test est le Samsung Galaxy S4 mini LTE modèle coréen (SHV-E370K) et non le modèle global (GT-I9195).
\==========================================
Si le wifi est connecté, le système n'appelle pas dataEnabled (car il n'a pas besoin de données mobiles).
Il ne peut donc pas recevoir l'état d'activation du mobile (en fait, les données mobiles ne sont PAS activées).
J'ai décidé de programmer un minuteur (période = 10000ms) et de vérifier getMobileDataEnabled()
.
private Method connectivityManager_getMobileDataEnabled = null;
private Method getConnectivityManager_getMobileDataEnabled() throws NoSuchMethodException {
if (connectivityManager_getMobileDataEnabled == null) {
connectivityManager_getMobileDataEnabled = ConnectivityManager.class.getMethod(
"getMobileDataEnabled",
new Class[0]);
}
return connectivityManager_getMobileDataEnabled;
}
public boolean getMobileDataEnabled()
throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Method getMobileDataEnabled = getConnectivityManager_getMobileDataEnabled();
getMobileDataEnabled.setAccessible(true);
return (Boolean) getMobileDataEnabled.invoke(mConnectivityManager);
}