Comment créer et lire par programmation WEP/EAP WiFi configurations
sur Android?
J'ai vu un certain nombre de personnes se débattre sur cette même question sur divers forums et dans toute la communauté. Je sais que ce n'est pas si simple (en particulier EAP) à comprendre parce que lorsque je voulais atteindre la même chose, j'ai aussi beaucoup de mal.Eh bien, tout le travail acharné d'analyse de code et de recherche de diverses implémentations sur Internet fait avec enfin capable d'atteindre l'objectif. Tout le mérite revient au nombre de projets open source et à leurs développeurs.
Je voudrais partager cette connaissance avec tous, puisque SO encourage ceci: "C'est aussi parfaitement bien de poser et de répondre à votre propre question, tant que vous faites semblant d'être sur Jeopardy: formulez-la sous la forme d'une question."
Partie 1: Création d'une configuration WiFi WEP par programmation.
Partie 2: Lire une configuration WiFi WEP par programmation.
Partie 3: Lire une configuration WiFi EAP par programme.
Partie 4: Enregistrer une configuration WiFi EAP par programmation.
la source
Réponses:
Partie 1: Création d'une configuration WiFi WEP par programmation
C'est assez simple, WifiConfiguration expose l'interface pour créer la même chose. Voici l exemple de code:
Suivre les autorisations nécessaires dans AndroidManifest.xml
Partie 2: Lisez à nouveau une configuration WiFi WEP par programme
Straighforward. Voici l exemple de code:
Partie 3: Lire une configuration WiFi EAP par programme
Maintenant, c'est délicat. Vous pouvez trouver le code qui enregistre une configuration WiFi EAP via l'interface utilisateur Android vanilla dans WifiDialog.java . Eh bien assez facile Nous pouvons utiliser le même code dans notre application, Eh bien NON! Si vous arrive d'essayer celavous obtiendrezerreursdisant ne peut pas trouver les symboles
eap
,phase
,client_cert
et ainsisuite. Une petite enquête détaillée nous indique EnterpriseField à l'is private
intérieur de laWiFiConfiguration
classe et tous les symboles que nous ne pouvons pas trouver sont du typeEnterpriseField
. Eh bien, nous avons atteint un barrage routier, nous avons besoin de ces champs pour lire / enregistrer une configuration EAP mais nous n'y avons pas accès par programme!Java Reflection API
à la rescousse Eh bien, je ne suis pas un expert Java, donc je n'entrerai pas dans les détails de l'API Reflection en tant que tel et vous pouvez rechercher des tutoriels sur Google ou obtenir plus d'informations ici . Pour rester court et doux, l'API Reflection vous permet d'inspecter les classes, les interfaces, les champs et les méthodes au moment de l'exécution, sans connaître les noms des classes, des méthodes, etc. au moment de la compilation. Il est également possible d'instancier de nouveaux objets, d'appeler des méthodes et d'obtenir / définir des valeurs de champ à l'aide de la réflexion.Et, surtout, la réflexion peut vous aider à accéder aux données privées membres d'une classe Eh bien, c'est ce dont nous avons besoin, n'est-ce pas? :)Voyons maintenant l'exemple de code qui montre comment lire une configuration WiFi EAP à l'aide de Reflection Api. En prime, l'extrait de code enregistrera la configuration dans un fichier et l'enregistrera sur la carte SD .... assez lisse ..eh;) Un petit aperçu de Reflection Api et je suis sûr qu'il est facile de saisir le code ci-dessous.
Il s'agit du code pour créer un fichier de connexion sur la carte SD avant d'appeler la
readEapConfig()
fonction.Maintenant, la
readEapConfig()
fonction elle-même:la source
Ahh j'ai manqué d'espace d'édition, ajoutant la partie restante ici.
Partie 4: Enregistrer une configuration WiFi EAP par programmation
Si vous avez déjà lu la partie 3, vous comprenez déjà la magie de réflexion qui fonctionne ici.Si vous passez directement à cette section, veuillez lire l'introduction avant l'extrait de code de la partie 3 et vous serez à jour pour parcourir le code ici !
Eh bien c'est ça! Et j'espère que cela aidera un développeur perdu, quelque part, parfois :)
la source
Field wcAdhoc = WifiConfiguration.class.getField("adhocSSID"); Field wcAdhocFreq = WifiConfiguration.class.getField("frequency");
. Ces membres ne sont pas dans WifiConfiguration.java. Le code me donne une exceptionjava.lang.NoSuchFieldException: adhocSSID
. Veuillez aider.wcefPrivateKey.get(selectedConfig)
jette unNullPointerException
. Une chance de quelqu'un d'autre?Android a ajouté une API à JellyBean 4.3. Vous devez utiliser cette option si vous souhaitez configurer le WIFI sur l'API 18:
http://developer.android.com/reference/android/net/wifi/WifiEnterpriseConfig.html
la source
La quatrième partie m'a lancé sur la bonne voie! Cependant, je voulais créer une configuration TTLS plutôt que TLS, voici comment je l'ai fait!
J'espère que cela aide quelqu'un. @Android Learner J'ai supprimé le mot sur adHocFrequency et SSID car ils provoquaient des plantages, mais mes résultats étaient toujours bons sans eux.
la source
Les clés WEP sont masquées, il n'est donc pas possible de les lire avec le code mentionné
Existe-t-il un moyen de résoudre ce problème de la même manière que la solution EAP? Avec réflexion?
la source