- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 WifiP2pManager.connect()
创建一个 WifiP2pGroup
。这工作正常,但该组总是在三十分钟后解散,无论是否正在传输数据。有谁知道为什么会发生这种情况,或者是否可以避免这种情况?
我曾尝试在设备之间连续发送数据,并使用唤醒锁让屏幕始终保持打开状态,但这没有任何区别。我已确保 wifi 设置为不休眠,还获得了 wifilock,并关闭了应用程序和 wifi direct 的电池优化,但这些都无济于事。三十分钟后(或者具体来说,29 米 18 秒 - 它非常一致)我收到 CONNECTION_STATE_CHANGE
广播并且设备不再配对。
这些设备是运行 Android 7 (LineageOS)
的 Nexus 7
和运行 Android 6
的 Samsung Galaxy A5
>.
谢谢!
编辑:我试过在关闭移动数据和未连接 wifi 的情况下运行。该应用程序未被暂停或销毁,并且没有其他应用程序有权更改 wifi 状态。在其中一台设备的 wifi 日志中,我在断开连接时发现了这个事件:
E/DhcpStateMachine: DHCP renew failed on p2p-wlan0-0: Timed out waiting for DHCP Renew to finish
D/WifiP2pService: GroupCreatedState{ what=196613 }
E/WifiP2pService: DHCP failed
在另一台设备上,我在断开连接过程开始时发现了这个:
552-813/system_process V/WifiHAL: event received NL80211_CMD_DEL_STATION
552-846/system_process D/WifiMonitor: Event [IFNAME=p2p-p2p0-11 AP-STA-DISCONNECTED b6:22:8b:b1:df:0f p2p_dev_addr=f2:62:6f:d1:5f:0c]
552-846/system_process D/WifiMonitor: p2p0 cnt=6442 dispatchEvent: AP-STA-DISCONNECTED b6:22:8b:b1:df:0f p2p_dev_addr=f2:62:6f:d1:5f:0c
552-629/system_process D/WifiP2pService: Client list empty, remove non-persistent p2p group
最佳答案
下面看起来 2 个对等体的 DHCP 租约是 30 分钟,更新失败。
E/DhcpStateMachine: DHCP renew failed on p2p-wlan0-0: Timed out waiting for DHCP Renew to finish
D/WifiP2pService: GroupCreatedState{ what=196613 }
E/WifiP2pService: DHCP failed
服务广告商和服务浏览器有 IP 地址,浏览器的 DHCP 分配给广告商。如果 DHCP 更新失败,则连接丢失,设备必须重新连接。似乎在 29 分 18 秒尝试续租,并在 30 分钟的租约时间超时。此时浏览器必须重新连接。如果 DHCP 服务器不记得浏览器的 IP 地址,或者如果框架总是发布一个新的 IP,那么就会发生您描述的情况。希望这会有所帮助。
编辑:这篇文章似乎证实了群组所有者充当 DHCP 服务器:Get peer device's IP address in wifi-direct p2p connection .不过,我不知道如何增加 WiFi-Direct 的租用时间。
编辑:此链接讨论了 Android 上 DHCP 的一些问题:https://www.net.princeton.edu/android/android-stops-renewing-lease-keeps-using-IP-address-11236.html
编辑:https://www.net.princeton.edu/android/android-11236-partial-workaround.html 中包含可能的解决方案, 附在下面。这个想法是使用组所有者设备上的设置。
程序
Depending upon the version of Android on your device, there should be a "Wi-Fi sleep policy" setting, a "Wi-Fi disconnect policy" setting, or a "Keep Wi-Fi on during Sleep" setting. (Your device will have only one of these; the name varies.) It should be available at (only) one of the following locations:
Settings
-> Wireless & networks
-> Wi-Fi settings
-> Menu (button)
-> Advanced
-> Wi-Fi sleep policy
Settings
-> Wireless & networks
-> Wi-Fi settings
-> Wi-Fi disconnect policy
Settings
-> Wireless & networks
-> Wi-Fi settings
-> Menu (button)
-> Advanced
-> Keep Wi-Fi on during Sleep
If the Wi-Fi settings item is greyed-out, you may need to turn on Wi-Fi before you can select this item.
If your device has a "Wi-Fi sleep policy" or " Wi-Fi disconnect policy", it should offer several choices. These choices available vary among different versions of Android. At least one of the choices should be "After 15 mins" or "When screen turns off". Select that choice.
Otherwise, if your device has a "Keep Wi-Fi on during Sleep" setting, it should offer several choices. These choices available may vary among different versions of Android. At least one of the choices should be "Never". Select that choice.
If you have any software installed on your Android device which modifies the way Android turns Wi-Fi on or off, then reconfigure that software so it no longer controls the device's Wi-Fi interface. Alternatively, disable or remove that software.
An example would be an application designed to keep your device's Wi-Fi interface always turned on. Another would be an application configured to turn on your device's Wi-Fi interface based on certain conditions (for example, location, time of day, or battery charge).
These applications are not the cause of the bugs. However, they can prevent this partial workaround from being effective, because these may be configured to override Android's "Wi-Fi Sleep Policy" (or "Wi-Fi disconnect policy"), causing the Wi-Fi interface to remain connected to the wireless network for an extended period while the Android device is asleep.
Every time you upgrade the Android software/firmware in the future, verify that the setting you selected above (the "Wi-Fi sleep policy", "Wi-Fi disconnect policy", or "Keep Wi-Fi on during Sleep" setting) remains configured as described above. Such upgrades sometimes modify existing settings; you must make a point of checking (and if necessary, changing) this setting immediately after upgrading.
Take care that any software you install in the future does not modify the way Android turns on or off Wi-Fi.
通过挖掘 p2 的源代码,底线是 p2p 的 dhcp 东西是由 ethernetworkfactory 完成的,绕过 native dhcp 服务器(参见 http://book2s.com/java/src/package/com/android/server/ethernet/ethernetnetworkfactory.html#199b9c81a59238cafe64b4e28b0c71ce ),这是一个有趣的代码 fragment :
/* Called by the NetworkFactory on the handler thread. */
public void onRequestNetwork() {
// TODO: Handle DHCP renew.
因此看起来 dhcp 租约永远不会在 p2p 框架中续订(见下文)。坦率地说,我必须检查一下;如果属实,这是一个非常重要的错误。如果是这样,那么按照上述帖子每 25 分钟重新连接一次的解决方案可能是唯一的方法。注意:dhcp 更新发生在租约更新时间的 48% 之前运行,先于本地 dhcp 更新(参见 https://android.googlesource.com/platform/frameworks/base/+/c3a2858/core/java/android/net/DhcpStateMachine.java);相关行是
//Do it a bit earlier than half the lease duration time
//to beat the native DHCP client and avoid extra packets
//48% for one hour lease time = 29 minutes
所以在 p2pdirect 中,看起来有一个层避免本地 dhcp 更新,但它本身并不实现。
关于android - Wifi-Direct 总是在三十分钟后断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44119808/
我想检查 wifi 是否有互联网连接。大多数解决方案/方法(包括 alamofire)仅在设备仅连接到 wifi 时才返回 true,不检查 wifi 是否有互联网连接。 最佳答案 苹果的reacha
是否可以通过 wifi 网络发送一些弹出消息或短信/彩信?如果是如何发送。 我的用例是向连接到我的开放 wifi 网络的设备发送某种弹出窗口。弹出窗口可以是图形广告或任何信息之类的东西。 任何人都可以
假设您对无线路由器有完全的编程控制(运行 OpenWrt 或 DD-WRT - Linux)。路由器配置为广播 ssid,并且网络完全开放。 移动用户(iPhone/Android/BB)走过来。 1
我正在编写一个 Android 应用程序,并试图弄清楚是否有可靠的方法来确定手机何时连接到特定的 wifi 网络。 例如,我只想在连接到家庭 wifi 时执行某些操作。 有人知道这是否可行吗? 最佳答
我想把我的 Raspberry PI 3 变成类似 WiFi 信号放大器、无线中继器/扩展器或 WiFi 热点之类的东西,可以放大微弱的 WiFi 信号。 经过一番研究,我找到了这个教程,点击 her
我目前正在使用我的 mongodb 服务器以及正在运行的 Nodejs 服务器测试我的 Android 应用程序。我希望服务器可以像内联网一样通过 WiFi 访问,以便手机上的应用程序可以访问本地服务
问题陈述 调用pcap_activate()结果 PCAP_ERR_RFMON_NOTSUP错误,即不支持射频监控模式。 上下文 我正在编写小型 C 程序,其工作是在监听模式下监听笔记本电脑的 wif
想象一下这种情况,周围有一些智能手机和计算机,它们的 WiFi 适配器(无线适配器)打开,但没有必要连接到网络。 有没有办法通过 Linux 机器查看 MAC 地址? 任何见解表示赞赏。 最佳答案 断
我在 WiFi 连接检测方面遇到问题。我的目标是检测用户何时在不同的 WiFi 之间切换。我发现this ,但它只检测 WiFi 何时建立。就我而言,我需要知道手机上的一个 WiFi 网络何时更改为另
我想获取一些有关 Wifi 的信息,例如 SSID 名称、IP 地址和速度,所以我编写了这段代码 WifiManager wifiMgr = (WifiManager) getSystemServic
我正在安装一个系统来监控一些传感器,并根据它们打开/关闭几盏灯。 为了进一步的数据分析,我们还想将该数据发送到中央服务器,因此我们添加了 Wifi 屏蔽。 请记住,如果没有网络,系统应该可以正常运行。
这两天我一直在苦苦挣扎,我找不到解决办法。我尝试了这段代码,但随着时间的推移,它在 Android 5(Lollipop) 上运行,但在 7.1.1.(Nougat) 上不起作用。我有另一个场景,手机
我正在开发一些软件来管理通过 ZigBee 与 Remote 通信的设备。我们希望设备能够通过 Wi-Fi 与网络服务器和/或智能手机通信,以便我们的软件可以与之交互。 ZigBee Remote 很
自 setWifiEnabled在 Android 10 上已弃用,如何在 Android 10 设备上以编程方式启用 wifi? 是否无法在 Android 10+ (SDK 29) 上以编程方式启
我正在尝试从 WiFi 数据包中获取 RSSI 或信号强度。 我还想要来自“WiFi 探测请求”的 RSSI(当有人在搜索 WiFi 热点时)。 我设法从 kismet 日志中看到它,但这只是为了确保
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic
我需要一个 IOS 应用程序,用户将在其中启动应用程序,录制音频语音(通过设备麦克风),该语音语音将广播给同一网络上的其他用户,所有这些都必须通过无线连接(WIFI)进行直播。 我对可能的解决方案进行
更新: 我指出了问题的来源。为了避免任何复杂化,我使用 ScanNetwork 示例,所以我什至不必输入 SSID .该代码在遇到 WiFi.status() 后立即停止在板上运行. 我有一个 Ser
在我的 android 应用程序中,我连接到 WiFi 网络。但是,例如,如果我多次连接到这个网络,这个网络的名称就会多次出现在标准的 android WiFi 列表中。我怎样才能避免这种情况? 我的
我有可用的 wifi 网络列表列表,现在我想连接到特定网络。所以请指导我在 ListView 中获取网络列表后必须做什么。 **package com.example.wifilist imp
我是一名优秀的程序员,十分优秀!