Articles of wifimanager

如何在Wi-Fi Direct系列中不再提供对等设备时收到通知?

我正在开发基于使用Wifi Direct API的Android应用程序。 我在我的Activity注册了一个BroadcastReceiver ,以便收到有关以下Wifi Direct事件的通知: WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION 我相信对等列表中的任何更改(包含或排除Wifi Direct范围内的对等方)都可能触发BroadcastReceiver 。 在我的应用程序中,当find新的对等体时,其名称正确地包含在ListView ,但如果对等体离开无线范围(或者如果我关闭其Wi-Fi接口),则不调用BroadcastReceiver (更具体地说,该 WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION 事件未被触发),对等名称仍保留在ListView 。 我想知道是否有任何方式来处理这个问题,因为对等名称包含在ListView ,但从未排除。 我已经考虑重新初始化Channel和WifiP2pManager实例,但我相信这会断开所有对等体。

android wifiManager.addNetwork返回-1

我正在编写一个Android应用程序,它将连接到特定的WPA访问点,连接后,它将发出一个http调用。 它不会保存网络配置。 我已经阅读了连接到wifi网络上几乎所有关于堆栈溢出的post,但找不到对我有用的答案。 这是我用来连接的代码.. WifiConfiguration wc = new WifiConfiguration(); wc.allowedAuthAlgorithms.clear(); wc.allowedGroupCiphers.clear(); wc.allowedPairwiseCiphers.clear(); wc.allowedProtocols.clear(); wc.allowedKeyManagement.clear(); wc.SSID = “\””.concat(“”).concat(“\””); wc.preSharedKey = “\””.concat(“”).concat(“\””); wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); // For WPA2 wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); // For WPA wc.priority = 0; //wc.hiddenSSID = true; wc.status = WifiConfiguration.Status.ENABLED; // connect to and enable the connection WifiManager wifiManager = (WifiManager) […]

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

我想开发一个可以阻止连接到WiFi网络的应用程序,除非我批准它。 我希望能够查询接入点的MAC地址,并将其与SSID对应的已知地址列表进行比较。 该应用程序的目标是保护用户不会意外连接到恶意访问点,例如可以使用菠萝设备生成的types。 我不清楚我的研究如何实现这一目标。 诸如如何通知wifi网络状态变化等问题? 解释如何检测连接已经发生 ,但对于我的用例已经太晚了。 ConnectivityManager和WifiManager似乎都没有提供添加可能会中断正在进行的连接的侦听器的方法。 我对解决方案的一些想法: 将自己安装为代理,并决定是否允许数据通过。 但是,这似乎不是基于Do Android代理设置适用于设备上的所有应用程序的选项吗? (提示:答案是“不”)。 用我自己创建的东西替换现有的WiFi管理器。 但是,我真的很难在Android开发人员指南中find有关更换系统组件的任何信息。 因此,我不确定这在非根电话上是否可行。 将网络密码存储在我的应用程序中,并将WiFi管理器中的密码设置为无意义的值。 然后捕获一个警告连接失败的广播消息(可能类似于WifiManager.WPS_AUTH_FAILURE )并有选择地决定重新连接回该网络。 可能是一个可能的(如果丑陋的)解决方案,但是我可以在网络仍然连接时将密码设置回无意义的值,以确保我们不会安静地连接到另一个同名的SSID吗? 我不确定 。 我发现菠萝设备可能会接受任何密码,从而使这种方法无效。 find一些方法来阻止Android自动连接到已知网络(即以前使用过的网络或者密码存储的网络)。 然后我可以管理我的应用程序的所有连接/断开连接。 我无法在手机上看到如何手动执行此操作,因此我怀疑这是可行的。 任何人都可以建议一种可以在非根电话上运行的方法吗?

以编程方式获取Wi-Fi协议(802.11a / b / g / n)

通过WifiManager,我的Android应用程序可以获得有关Wi-Fi的大量细节。 但是我没有得到协议types,如a / b / g / n。 我有客户要求这样做。 有谁知道如何实现这一目标? (我没有选择使用adb)。 它将以编程方式完成。 我坚信设备和路由器在连接之前已经协商了协议。 所以信息与设备有关。 问题是,我们如何得到它?

在Android上的每个WiFi扫描之间应该使用什么间隔?

我需要定期执行Wifi扫描。 时间间隔设置为1-2秒时遇到问题。 看来我没有得到任何ScanResult 。 是否有最低限度的时间设置,以便WifiManager能够执行成功的WiFi扫描? 这是代码。 我正在使用Service进行Wifi扫描: public class WifiScanning extends Service{ private static final String TAG = "WifiScanning"; private Timer timer; public int refreshRate, numberOfWifiScan, wifiScanGranularity; WifiReceiver receiverWifi = new WifiReceiver(); WifiManager wifi; StringBuilder sb; List<ScanResult> wifiList; List<APData> apdataList; List<List<APData>>surveyData; private TimerTask updateTask = new TimerTask() { @Override public void run() { Log.i(TAG, "Timer […]

Android WifiLock WIFI_MODE_SCAN_ONLY无法正常工作

我试图阻止无线连接。 我希望我的应用程序打开wifi,但不连接到已存储在智能手机上的任何networking。 但即使在使用SCAN_ONLY模式之后,他仍然连接到已经“知道”的networking。 ….. wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); ….. wifiManager.setWifiEnabled(true); WifiLock scanOnly = wifiManager.createWifiLock(WifiManager.WIFI_MODE_SCAN_ONLY, "scanOnly"); scanOnly.acquire(); 已经绝望,我试图断开后,确保状态是WIFI_STATE_ENABLED无线。 该应用程序无法连接几秒钟,但一段时间后,它连接到同一个networking… wifiManager.setWifiEnabled(true); …. WHEN (WIFI STATE == WIFI_STATE_ENABLED) {wifiManager.disconnect(); scanOnly.acquire();} 有人能帮我吗? TKS

Android Wi-Fi扫描:从ScanResult过滤打印机

我正在研究一个需要扫描公共Wi-Fi接入点的项目。 目前,我正在像这样筛选ScanResult : for (ScanResult scanResult : wifiList) { if (!(scanResult.capabilities.contains("WEP") || scanResult.capabilities.contains("WPA") || scanResult.capabilities.contains("WPA2"))) { openWifiList.add(scanResult); } } 它工作正常,除了我也得到附近的打印机。 扫描时,手机没有连接到任何networking。 我假定我得到的是与Android上的Wi-Fi设置中显示的Wi-Fi连接列表完全相同的列表。 但是在Wi-Fi设置中没有显示任何打印机。 所以对于1)我认为奇怪的是打印机显示在ScanResult列表中, 是否打印机真的可以这样看 ? 更新:并不是所有的Wi-Fi打印机都可见,我对此有一些提示,而且似乎正在显示的打印机具有特殊的function,例如HP打印机支持HP Wireless Directfunction(请参阅https: /h30434.www3.hp.com/t5/Inkjet-Printing/Printer-SSID-appearing-on-my-wi-fi-list/td-p/1705073和https://support.hp.com/rs-en / document / c04577030 )。 2) 有什么方法可以检查ScanResult是否属于打印机 ? 到目前为止,我只能想到过滤普通的SSID名称,但这不会是非常有效或可靠的。 感谢您的任何build议。

WiFi锁不起作用,如何防止wifi功率节省?

我做了一个应用程序,将手机变成networking摄像头,并使用手机连接将图像发送到互联网networking空间。 我正在使用广告活动,每5或15分钟设置一个“闹钟pipe理器”执行一项服务。 要执行服务的整个执行,我会执行一次唤醒locking,但是当服务完成时会中断。 所有这一切都与移动连接完美的工作,但不与wifi一样。 我已经在无线networking睡眠设置在WiFi选项策略“从不”。 但经过一段时间(并不总是相同的)手机似乎进入省电模式:WiFi图标尚未在状态栏,但手机无法连接。 即使是我使用浏览器…所以我必须断开连接并手动重新连接。 logcat中的消息: notify conn break (IOEx), close connection即使手机插上电源!!! 为什么? (1) 做一个由启动服务的活动组成的另一个应用程序,它总是以一个唤醒锁来运行。 所以我已经添加了wifilocking以确保连接,而且这种方法有时运行,而其他一些不是。 总是一样的notify conn break (IOEx), close connection为什么? (2) 最后一个实验是从第一个应用程序(报警pipe理器)派生出来的,并确保wifi没有进入睡眠/省电模式(一个??)我已经在执行代码后以飞行模式打开电话并在循环开始时closures(连接)。 这项工作可以两天,但有时只是在工作后(每个小时或两个,而不是每个5分钟,或有时不工作一整天,然后重新启动没有任何理由..)。 那么,为什么飞机模式有时不会重新build立起无线连接呢? (还有一些时候呢?)(3) 这款手机是原装2.2版的三星Galaxy ACE,并一直插上充电。

Android M:无法以编程方式删除Wi-Fi AP

Android M上:我使用下面的代码来删除当前连接的AP。 void RemoveConnectedNetwork(){ int ID=_wifiManager.getConnectionInfo().getNetworkId(); Log.d("test", "network id = ["+ID+"]"); boolen ret =_wifiManager.removeNetwork(ID); Log.d("test", "removeNetwork return ="+ret); _wifiManager.saveConfiguration(); } 但removeNetwork总是返回false。 尽pipe此API在以前的版本中运行良好。 任何想法,同样可以使用任何其他API来实现?

如何在使用Java的Android Wi-Fi连接上设置ProxySettings和ProxyProperties?

如何使用Java(编程)在Android Wi-Fi连接上设置ProxySettings和ProxyProperties? 由于ipAssignment,linkProperties,ProxySettings和ProxyProperties是Android 3.1及以上的WifiConfiguration中的隐藏字段,我需要能够枚举类和使用字段。 下面的代码示例使用下面的链接,我可以设置一个特定的Wi-Fi连接的静态IP地址,网关和DNS,但我也需要设置Wificonfiguration.ProxySettings.STATIC和ProxyProperties 请参阅堆栈溢出问题如何以编程方式在Android 3.x或4.x上configuration静态IP地址,networking掩码,网关 。 例如, WifiConfiguration config = new WifiConfiguration(configuration); config.ipAssignment = WifiConfiguration.IpAssignment.UNASSIGNED; config.proxySettings = WifiConfiguration.ProxySettings.STATIC; config.linkProperties.setHttpProxy(new ProxyProperties("127.0.0.1", 3128, "")); 寻找像这样的东西: setProxySettings("STATIC", wifiConf); setProxyProperties("proxyserver.mine.com.au", 8080, ""); // Set Proxy server and port. wifiManager.updateNetwork(wifiConf); //apply the setting 使用下面的代码从coolypf .ipAssignment .ProxySettings和linkProperties被隐藏… WifiManager manager = (WifiManager)getSystemService(Context.WIFI_SERVICE); manager.asyncConnect(this, new Handler()); if (!manager.isWifiEnabled()) return; List<WifiConfiguration> configurationList […]