Articles of android wifi

如何在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实例,但我相信这会断开所有对等体。

如何使用Wifi或GSM或GPS获取粗略位置,以哪个可用?

我的应用程序启动时只需要一个粗略的位置服务。 详细地说,我需要应用程序的粗略位置,以便为用户提供附近的商店信息。 该位置不需要不断更新。 此外,在这种情况下,粗略定位就足够了。 我希望应用程序能够自动选择GSM,wifi或GPS,无论哪个可用。 定位服务也应该是一次性的,以节省电话能量 。 我该怎么办? 我曾尝试单独使用GPS。 我的问题是我不知道如何停止GPS的不断更新的位置function。 我不知道如何让手机从三种方法中选择一种。 非常感谢一些示例代码或想法。

“SHAREit”Android应用程序如何在技术上运作?

我想在Android上使用wi-fi构建一个数据共享应用程序,如“SHAREit”,但我没有得到我从哪里开始。 因此,如果任何明确我的“SHAREit”的技术概念,那么理解它是非常有效的。 当我们想要发送文件时,我们看到了可用的名称接收器设备。 名称是否显示为SSID或其他? 我们如何广播要在发送方设备上显示的名称和其他信息? 当我选择要发送文件的设备时会发生什么? 实际上我可以使用什么API ,请为我解释一下。 请测试我可以运行的所有资源和链接。

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