java – 防止Android手机连接到WiFi网络,除非我的应用程序批准?

我想开发一个可以防止连接到WiFi网络的应用程序,除非我批准。我想能够查询接入点的MAC地址,并将其与对应于SSID的已知地址列表进行比较。应用程序的目标是保护用户意外连接到恶意访问点,例如可以使用pineapple devices生成的类型。

我的研究不清楚我将如何实现这一目标。问题如How to be notified on wifi network status change?解释如何检测连接已经发生,但对于我的用例已经太晚了。

ConnectivityManager和WifiManager似乎都没有提供添加可能中断正在进行的连接的侦听器的方法。

有一些想法我已经解决了:

>安装自己作为代理,并决定是否允许数据通过。然而,这似乎不是基于Do Android proxy settings apply to all apps on the device?的选项(提示:答案是“否”)。
>使用我自己创作的东西替换现有的WiFi管理器。不过,我真的很难找到有关更换系统组件的Android开发者指南中的任何信息。因此,我不确定这是否可以在无根手机上。
>将网络密码存储在我的应用程序中,并将WiFi管理器中的密码设置为废话值。然后捕获一个广播消息,警告失败的连接(可能是类似于WifiManager.WPS_AUTH_FAILURE的内容),并有选择地决定重新连接到该网络。可能是一个可能的(如果是丑陋的)解决方案,但是我可以在网络连接时将密码设置为无意义的值,以确保我们不会静默地连接到另一个同名的SSID?我不确定。对我来说,菠萝设备可能会接受任何密码,从而使此方法无效。
>找到一些方法来防止Android自动连接到已知网络(即之前使用的网络或与之一起存储的密码)。然后我可以管理我的应用程序的所有连接/断开连接。但是,我手机上看不到手动操作,所以我怀疑这是可以通过编程方式进行的。

任何人都可以提出一种可以在无根手机上工作的方法吗?

您无法实现非常强大的系统,而不会使设备生根。这是你最接近的,我想:

>使用getConfiguredNetworks()获取当前在用户设备上配置的网络列表
>对于列表中的每个WifiConfiguration,将公共字段BSSID设置为所需的“安全”MAC地址
>呼叫saveConfiguration()来保存更改

或者,对于步骤(2.),您可以为每个配置的网络调用disableNetwork(),并根据BSSID有选择地启用它们。请注意,MAC地址仍然可以很容易地欺骗。

http://stackoverflow.com/questions/26687211/prevent-android-phone-from-connecting-to-wifi-network-unless-my-app-approves-it

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 防止Android手机连接到WiFi网络,除非我的应用程序批准?