How to programmatically create and read WEP/EAP WiFi configurations in Android?
我看到很多人在各种论坛和整个社区的这个问题上苦苦挣扎 . 我知道这不是那么直截了当(特别是EAP)弄清楚因为当我想要实现同样的目标时我也非常挣扎 . 好吧,代码分析和搜索互联网上的各种实现的所有艰苦工作都是我做的终于能够实现目标了 . 所有的功劳归功于开源项目及其开发人员的数量 .
我想与所有人分享这些知识,因为SO encourages这个:"It's also perfectly fine to ask and answer your own question, as long as you pretend you're on Jeopardy: phrase it in the form of a question."
Part 1: Creating a WEP WiFi configuration programmatically.
Part 2: Read a WEP WiFi configuration programmatically.
5 回答
Part 1: Creating a WEP WiFi configuration programmatically
这非常简单,WifiConfiguration暴露了创建相同的界面 . 以下是示例代码:
遵循AndroidManifest.xml中所需的权限
Part 2: Read a WEP WiFi configuration programmatically
再次直截了当 . 以下是示例代码:
Part 3: Read a EAP WiFi Configuration programmatically
现在这很棘手 . 您可以在WifiDialog.java中找到通过vanilla Android UI保存EAP WiFi配置的代码 . 很容易我们可以在我们的应用程序中使用相同的代码,不!如果你碰巧尝试这个,你会收到错误,说找不到符号
eap
,phase
,client_cert
等等 . 一个小小的详细调查告诉我们EnterpriseField_________WiFiConfiguration
类,我们找不到的所有符号都是EnterpriseField
类型 . 好吧,我们've hit a roadblock, We need these fields for reading/saving a EAP config but we don' t可以通过编程方式访问它们!Java Reflection API to the rescue 嗯,我不是Java专家,因此我不会深入了解Reflection API的详细信息,您可以谷歌获取教程或获取更多信息here . 为了保持Short和Sweet,Reflection API允许您在运行时检查类,接口,字段和方法,而无需在编译时知道类,方法等的名称 . 也可以使用反射来实例化新对象,调用方法和获取/设置字段值 . 重要的是 Reflection can help you access private data members inside a class 这就是我们需要的不是吗? :)
我们现在查看代码示例,其中显示了如何使用Reflection Api读取EAP WiFi配置 . 作为奖励,该片段会将配置记录到一个文件并将其保存在SD卡上....非常光滑..eh;)一点点反射Api的概述,我确信 grab 下面的代码很容易 .
这是在调用
readEapConfig()
函数之前在SD卡上创建日志文件的代码 .现在
readEapConfig()
函数本身:啊,我没有编辑空间,在这里添加剩下的部分 .
Part 4: Save a EAP WiFi configuration programmatically
如果您已经阅读了第3部分,那么您已经理解了在这里工作的Reflection魔法,如果您直接跳到本节,请阅读第3部分中的代码片段之前的介绍,您将可以快速完成这里的代码 . !
好吧,就是这样!我希望这可以帮助一些失去的开发人员,某个地方,某个时候:)
Android已经为JellyBean 4.3添加了一个API . 如果要在API 18上配置WIFI,则必须使用此选项:
http://developer.android.com/reference/android/net/wifi/WifiEnterpriseConfig.html
第4部分让我走上了正确的道路!但是我想创建一个TTLS而不是TLS配置,这就是我做到的!
希望这对某人有所帮助 . @Android学习者我删除了关于adHocFrequency和SSID的内容,因为它们导致了崩溃,但没有它们我的结果仍然很好 .
WEP密钥被屏蔽,因此无法使用上述代码读取它们
有没有办法像EAP解决方案一样解决这个问题?用反射?