Comment savoir si "les Données de Réseau Mobile" est activé ou désactivé (même lorsqu'il est connecté en WiFi)?
J'ai une application que je veux être en mesure d'utiliser pour obtenir un état de la connexion du rapport à partir d'une requête à distance.
Je veux savoir si le WiFi est connecté, et si l'accès aux données est activé sur le réseau mobile.
Si le WiFi passe hors de portée, je veux savoir si je peux compter sur le réseau de téléphonie mobile.
Le problème est que les données activé est toujours renvoyée en tant que vrai quand je suis connecté en WiFi, et je ne peux m'interroger correctement le réseau mobile lorsqu'il n'est pas connecté par WiFi.
toutes les réponses que j'ai vu suggèrent d'interrogation pour voir ce que la connexion actuelle est, mais je veux savoir si le réseau mobile est disponible si j'en ai besoin, même si je pourrais être connecté par WiFi à l'heure actuelle.
Est-il de toute façon de dire si des données de réseau mobile est activé sans interrogation pour voir si il est connecté?
MODIFIER
Donc quand il est connecté par WiFi Si j'ai accédez à paramètres, puis désélectionnez l'option "Données Activées" et puis, dans mon application, j'ai cela:
boolean mob_avail =
conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isAvailable();
mob_avail est retourné en tant que "vrai", mais j'ai désactivé le Réseau Mobile de Données, donc je m'attends à être "faux"
Si je désactive le WiFi, il n'y a (à juste titre) pas de connexion que j'ai désactivé le réseau mobile de données.
alors, comment puis-je vérifier si des données de réseau mobile est activé que lorsque je suis connecté par WiFi?
Mise à JOUR
J'ai pris un coup d'oeil à getAllNetworkInfo() comme suggéré dans les commentaires par ss1271
J'ai sorti l'info renvoyée sur le réseau de téléphonie mobile sous 3 conditions suivantes
Désactiver WiFi - Mobile de Données sur
WiFi Sur Mobile des Données
WiFi Sur Mobile des Données sur
et a obtenu les résultats suivants:
Avec le WiFi DÉSACTIVÉ:
mobile[HSUPA], etat: CONNECTÉ ou CONNECTÉ, la raison: inconnu, extra:
internet, itinérance: false, le basculement: false, isAvailable: true,
featureId: -1, userDefault: fauxAvec WiFi /Mobile HORS
NetworkInfo: type: mobile[HSUPA], etat: DÉCONNECTÉ/DÉCONNECTÉ,
raison: connectionDisabled, extra: (aucun), itinérance: false,
basculement: false, isAvailable: true, featureId: -1, userDefault:
fauxAvec WiFi /Mobile Sur
NetworkInfo: type: mobile[HSPA], etat: DÉCONNECTÉ/DÉCONNECTÉ,
raison: connectionDisabled, extra: (aucun), itinérance: false,
basculement: false, isAvailable: true, featureId: -1, userDefault:
faux
Donc, comme vous pouvez le voir isAvailable retourné vrai à chaque fois, et de l'état seul a montré que Déconnecté lorsque le WiFi était en effet.
CLARIFICATION
Je suis PAS à la recherche pour voir si mon téléphone est actuellement connecté par le Réseau Mobile. Je SUIS de la tentative d'établir si oui ou non l'utilisateur a activé /désactivé l'accès aux Données sur un réseau mobile. Ils peuvent activer ou le désactiver en allant dans Paramètres -> sans Fil et Réseau Paramètres ->Paramètres Réseau Mobile -> Données activées
- stackoverflow.com/questions/12686899/... même chose
- avez-vous essayé: getAllNetworkInfo()?
- Je ne me souviens pas la main, mais je vais essayer ça dès que je rentre à la maison et de mise à jour. Je présume qui retourne un tableau de connexions disponibles? Et que j'aurais besoin de parcourir le tableau?
- oui, il retournera un tableau. Honnêtement, je n'ai pas l'utiliser avant, de sorte que vous devrez peut-être l'impression des journaux pour voir ce qu'il va obtenir pour vous. Et s'il vous plaît laissez-moi savoir la suite, bonne chance
Vous devez vous connecter pour publier un commentaire.
Le code suivant va vous dire si les "données mobiles" est activé ou non, indépendamment de si oui ou non il y a une connexion de données mobiles active au moment ou si le wifi est activé/actif ou pas.
Ce code ne fonctionne que sur Android 2.3 (Gingerbread) et plus tard.en Fait, ce code fonctionne aussi sur des versions antérieures d'Android ainsi 😉Remarque: vous devez disposer d'une autorisation
android.permission.ACCESS_NETWORK_STATE
pour être en mesure d'utiliser ce code.ConnectionManager
pour accéder au réseau actuel de l'état (qui visiblement n'était pas ce que tu voulais) ou l'utilisation de laTelephonyManager
API (qui, malheureusement, n'offre pas l'accès à l'information que vous voulez).nonsense
essayer de lire ce que je voulais dire. vous êtes à l'aide de la réflexion qui ne fonctionne pas bien avec de l'obscurcissement.as long as you are using reflection on things that can not be obfuscated, such as frameworks or libraries
Je ne le savais pas. MerciConnectivityManager
etTelephonyManager
, donc beaucoup de solutions génériques pour Android ne fonctionnent pas sur ces appareils. C'est toujours un coup de feu dans l'obscurité.J'ai mis à jour Allesio de réponse. Les paramètres.Secure mobile_data int a déménagé à Paramètres.Mondiale depuis 4.2.2.
Essayez Ce code lorsque vous voulez savoir si réseau mobile est activé même lorsque le wifi est activé et connecté.
Mis à jour pour vérifier si la Carte SIM est disponible. Merci de remarquer murat.
Une façon est de vérifier si l'utilisateur dispose de données mobiles activées dans les Paramètres, ce qui sera très probablement être utilisé si le wifi est éteint.
Cela fonctionne (testé), et il n'utilise pas la réflexion, même si elle utilise une valeur cachée dans l'API:
Selon l'API, vous devez vérifier les Paramètres.Mondial à la place de Paramètres.Sécurisé, comme l'a souligné @user1444325.
Source:
Android appel API pour déterminer les paramètres de l'utilisateur "Données Activées"
@sNash de la fonction fonctionne très bien. Mais dans quelques dispositifs j'ai trouvé ça renvoie true, même si des données est désactivé.
J'ai donc trouvé une autre solution qui est de l'API Android.
getDataState() méthode de TelephonyManager sera très utile.
J'ai mis à jour @snash de la fonction avec la fonction ci-dessus utilisé. Ci-dessous la fonction renvoie la valeur false lorsque les données cellulaires est désactivé sinon vrai.
Vous pouvez essayer quelque chose comme ça:
Si vous êtes intéressé, si vous êtes vraiment connecté, utilisez
seulement, au lieu de
Ici est un xamarin solution à ce problème:
PS: assurez-vous de disposer de toutes les autorisations pour ce code.
Vous devez utiliser le ConnectivityManager, et NetworkInfo de détails peuvent être trouvés ici
Je pense que l'utilisation NetworkInfo classe et isConnected devrait fonctionner:
Et de vérifier les données mobiles connectés peut-être. Je ne peux pas être sûr jusqu'à ce que je l'ai tester. Que je ne peux pas le faire jusqu'à ce que tommorrow.
Selon android documentation https://developer.android.com/training/monitoring-device-state/connectivity-monitoring#java
utilisation TelephonyManager
Selon android documentation
https://developer.android.com/reference/android/telephony/TelephonyManager.html#isDataEnabled()
Voici une solution simple à partir de deux autres réponses:
Bien, il existe une solution de contournement pour vérifier si la connexion de données est activée. Mais je ne suis pas sûr que cela fonctionnera sur chaque appareil. Vous devez vérifier que. (Il a travaillé sur un appareil Android)
Si vous n'êtes pas au courant à propos de cette méthode, il renvoie le total d'octets reçus par le réseau mobile depuis le démarrage de l'appareil vers le haut. Lorsque vous désactivez la connexion de données mobiles, il sera de retour à Zéro (0). Lorsque vous mettez sur, il sera de retour le total d'octets de nouveau. Mais vous devez prendre en compte qu'il y a un problème qui peut se produire lors de l'utilisation de cette solution de contournement.