Articles of android wifi

如何在Android中获取wifi热点的IP?

正如标题所说……我试图在配置为热点时能够获得wifi的IP。 理想情况下,我想find适用于所有手机的东西。 当然,在从AP获取信息时,WifiManager是无用的。 幸运的是,通过这样做,我已经能够获得所有接口的IP: public String getLocalIpAddress() { try { for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { Log.d(“IPs”, inetAddress.getHostAddress() ); } } } } catch (SocketException ex) { Log.e(LOG_TAG, ex.toString()); } return null; } 这段代码将打印所有接口的所有IP(包括Wifi热点)。 主要问题是我找不到识别WiFi接口的方法。 这是一个问题,因为有些手机有多个接口(WiMax等)。 […]

在Android中关闭屏幕时如何防止CPU“hibernate”?

我有一个应用程序,我通过WiFI发送网络数据。 一切都很好,直到我关闭显示器或设备进入“睡眠”状态。 我已经锁定了WiFi但是, 似乎情况是在睡眠时CPU速度下降导致我的流不正常(即数据包不能像我想的那样快速流动设备没有睡觉)。 我知道我可能/可能应该在协议级别解决这个问题,但这可能也不可能 …… 有没有办法 “在屏幕关闭时防止CPU进入’睡眠’”? 如果是这样,怎么样? 如果没有,关于如何保持WiFi流的速度的任何建议是否一致,无论设备是否处于睡眠模式?

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) […]

查找在wifi网络中连接的所有设备

我想在这里制作一个应用程序,它将检测该WiFi网络中连接的所有设备。 我已经做了足够的谷歌并提出了一个应用程序 ,可以检测应用程序的WiFi网络中连接的设备的IP地址。 现在我想要更多的东西。 我可以find设备名称,即电话名称或型号或系统名称,以便我们检测特定设备的任何信息吗? 我们能否find设备距离,例如我们使用应用程序的手机中的设备距离? 这是主要任务 – 我想通过连接到同一WiFi的设备共享数据。 那可能吗? 任何forms的帮助表示赞赏

使用Android获取当前的互联网速度(移动和Wifi)

我有一个必须在离线和在线模式下工作的应用程序。 应用程序必须根据当前网络连接(Wifi或数据)的Internet速度向应用程序服务器发出请求。 如果连接了Wifi,我可以使用此代码获得当前连接的Wifi信号强度。 WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int level = wifiManager.calculateSignalLevel(wifiInfo.getRssi(), 5); 要么 wifiInfo.getLinkSpeed(); 如果移动互联网已连接,我可以使用监听器类获得信号强度 @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { super.onSignalStrengthsChanged(signalStrength); int obj = signalStrength.getGsmSignalStrength(); int dBm = (2 * obj) -113; } 上面的代码获得信号强度,而不是速度。 那么,我如何获得连接网络的当前速度? 通常,在商店或网站中find的速度测试应用程序通过发送或下载特定文件或ping远程服务器然后使用经过的时间计算速度来检查速度。 我正在与之通信的应用服务器不支持此上传/下载或pingfunction,因此我无法使用它。 那么,有没有其他方法可以检查当前可以实时完成的互联网连接的速度? 任何线索都可能有所帮助。 PS:此链接具有用于检查当前网络的连接types的代码。 但有些情况下我的LTE信号具有完整的强度但没有/非常慢的互联网连接。 所以,对我来说,这也不是一个准确的解决方案。 https://gist.github.com/emil2k/5130324 谢谢

Android – 检测Wifi是否需要浏览器登录

我的大学有一个开放的无线接入点,但它要求您在允许您使用网络之前输入您的电子邮件。 我的问题是,Wifi是愚蠢的,因为它似乎放弃了我的连接并迫使我每10分钟再次输入我的电子邮件。 我想创建自己的应用程序,我可以使用它自动为我执行此步骤,但我似乎找不到任何文档,以便检测Wifi访问点是否具有浏览器登录页面。 在Android中是否有办法获取此信息,或者仅仅是为了查看我与某些内容的连接是否始终重定向到1.1.1.1?

Android Wear通过WiFi TCP / IP启用ADB连接

我正在尝试开发适用于Android Wear的应用。 为了在我的Moto 360手表(没有USB端口)上测试我的应用程序: 我通过USB将手机连接到电脑。 我在手机上打开了Android Wear配套应用程序并启用了“通过蓝牙进行调试”。 我在手表上打开了开发人员选项并启用了“adb调试”和“通过蓝牙调试”。 我在电脑上打开了一个终端并发出了命令 (1) adb forward tcp:4444 localabstract:/adb-hub (2) adb connect localhost:4444 我点击Android Studio中的“运行”按钮,选择我的Moto 360手表作为目标设备。 所有这一切都奏效了,我能够在手表上看到我的应用程序。 但是,使用上述方法通过蓝牙安装应用程序需要非常长的时间。 有时一分钟,有时是10分钟,它总是变化的。 我正在测试的应用程序非常小:一些xml文件和一个没有额外资源的java类。 我的问题是:有没有办法让我通过WiFi而不是蓝牙直接将我的Android Wear应用程序安装到我的Moto 360手表上? 在我的计算机上的终端中,我尝试使用命令: (1) adb tcpip 5555 (2) adb connect 192.168.1.23:5555 但我得到了错误 unable to connect to :5555 那么我尝试使用adb在我的手表上打开一个shell,启动adb服务器,然后连接到它: (1) adb -s localhost:4444 shell (2) adb start-server:5555 (3) exit (4) […]

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

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

如何在Android上以编程方式安装CA证书而无需用户交互

我正在尝试安装证书而不提示用户。 我知道这不是好习惯,但这就是PM想要的。 使用KeyChain.createInstallIntent() ,我可以通过调用startActivity让Android启动证书安装对话框。 但是,当我将意图传递给sendBroadcast ,没有任何反应。 出于安全考虑,平台可能不支持此function吗? String CERT_FILE = Environment.getExternalStorageDirectory() + “/test/IAT.crt”; Intent intent = KeyChain.createInstallIntent(); try { FileInputStream certIs = new FileInputStream(CERT_FILE); byte [] cert = new byte[(int)certFile.length()]; certIs.read(cert); X509Certificate x509 = X509Certificate.getInstance(cert); intent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded()); intent.putExtra(KeyChain.EXTRA_NAME, “IAT Cert”); EapActivity.this.startActivityForResult(intent, 0); // this works but shows UI EapActivity.this.sendBroadcast(intent); // this doesn’t install cert } […]

Android 2.3 wifi热点API

我需要在Android 2.2(Froyo)中创建一个用于创建Wifi热点的API调用(如Tethering和Portable Hotspot设置项中所示)。