- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发基于使用 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
BroadcastReceiver
.在我的应用程序中,当找到一个新的对等点时,它的名称正确地包含在
ListView
中。 ,但是如果对端离开无线范围(或者如果我关闭了它的 Wi-Fi 接口(interface)),
BroadcastReceiver
不被调用(更具体地说,
WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION
ListView
.
ListView
中。 ,但从不排除。我已经考虑过重新初始化 Channel 和
WifiP2pManager
实例,但我相信这将断开所有对等点。
最佳答案
I believed that any change in the list of peers (the inclusion or exclusion of a peer in the Wifi Direct range) could trigger the BroadcastReceiver.
In my app, when a new peer is found, its name is correctly included in a ListView, but if the peer leaves the wireless range (or if I turn off its Wi-Fi interface), the BroadcastReceiver is not invoked (more specifically, the WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION event is not triggered), and the peer name remains in the ListView.
WifiP2pSettings
Link
WifiDirectDemo
非常相似。项目 -
BroadcastReceiver
监听相同的四个 Action (另外两个 - 一个用于 UI 更新)。我们查看这个 fragment 的原因是检查演示本身是否存在缺陷。但是,看起来演示还不错。
WIFI_P2P_PEERS_CHANGED_ACTION
- 最终,我们有兴趣找出为什么在设备离线/超出范围时不会立即发生这种情况。这将我们带到
WifiP2pService
Link .
WifiP2pService # sendPeersChangedBroadcast()
发出广播:
private void sendPeersChangedBroadcast() {
final Intent intent = new Intent(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
intent.putExtra(WifiP2pManager.EXTRA_P2P_DEVICE_LIST, new WifiP2pDeviceList(mPeers));
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
}
WifiP2pService
,你可以看出
sendPeersChangedBroadcast()
被调用以响应几个事件。我们对此感兴趣:
WifiMonitor.P2P_DEVICE_LOST_EVENT
Link :
....
case WifiMonitor.P2P_DEVICE_LOST_EVENT:
device = (WifiP2pDevice) message.obj;
// Gets current details for the one removed
device = mPeers.remove(device.deviceAddress);
if (device != null) {
sendPeersChangedBroadcast();
}
break;
....
WifiMonitor # handleP2pEvents(String)
负责发送登陆上述
case
的消息.上链找到
MonitorThread
-
WifiMonitor
中的静态内部类.
MonitorThread # dispatchEvent(String)
调用
handleP2pEvents(String)
方法。
run()
MonitorThread
的方法:
private static class MonitorThread extends Thread {
....
public void run() {
//noinspection InfiniteLoopStatement
for (;;) {
String eventStr = mWifiNative.waitForEvent();
....
}
}
....
}
mWifiNative.waitForEvent()
告诉我这可能是一个阻塞调用。 MonitorThread # dispatchEvent(String)
- 从这个无限循环内部调用。
WifiNative
类(class)
Link ,尤其是方法
setScanInterval(int)
.此方法从类
WifiStateMachine
中调用
Link .过方法
processMessage(Message)
:
....
case WifiP2pService.P2P_CONNECTION_CHANGED:
NetworkInfo info = (NetworkInfo) message.obj;
mP2pConnected.set(info.isConnected());
if (mP2pConnected.get()) {
int defaultInterval = mContext.getResources().getInteger(
R.integer.config_wifi_scan_interval_p2p_connected);
long scanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS,
defaultInterval);
// ====>> Interval defined here
mWifiNative.setScanInterval((int) scanIntervalMs/1000);
} else if (mWifiConfigStore.getConfiguredNetworks().size() == 0) {
if (DBG) log("Turn on scanning after p2p disconnected");
sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
}
....
defaultInterval
在第一个
if block
.它正在请求
R.integer.config_wifi_scan_interval_p2p_connected
在
config.xml
中定义
Link作为:
<!-- Integer indicating wpa_supplicant scan interval when p2p is connected in milliseconds -->
<integer translatable="false" name="config_wifi_scan_interval_p2p_connected">60000</integer>
Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS
未设置,扫描将间隔 1 分钟。
WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS
被置于全局设置下,我们无法更改它。事实上,它甚至无法读取。意思是,我们这里唯一的保证是节点列表将在一分钟内刷新。间隔当然可以因品牌而异。
60 seconds
注意到华硕离线。另一方面,华硕拿下了
45 seconds
.
关于android - 当 Wi-Fi Direct 范围内的对等点不再可用时,如何通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21072081/
除了智能手机、平板电脑和个人电脑等流行设备外,Wi-Fi 6还将嵌入其他设备中,包括无线摄像头、智能家居设备、游戏机、可穿戴设备和AR/VR耳机。 那么,Wi-Fi 6会取代5G,成为下一代无线网络
在 API 14 或更高版本 (ICS) 中,可以使用临时 Wi-Fi 网络。我目前拥有以下设备,我正在尝试弄清楚如何测试 Wi-Fi 直连功能,或者我是否需要购买另一台搭载 Android 4.0
我正在构建一个 Android 应用程序以允许在有限范围内的两个设备之间进行通信,但我找不到与 native 等效的插件 Android Wi-Fi peer-to-peer适用于 Phonegap/
我目前正在尝试通过 Wi-Fi Direct 连接两部知道彼此 MAC 地址的手机,但偶然发现了以下问题:我从 收到的 MAC 地址 WifiManager wifiMan = (WifiMa
在 iOS 设备内和支持 Wi-Fi Direct 的设备之间是否可以进行 Wi-Fi Direct 连接? 目标是在没有任何 Controller 的情况下实现 iOS 设备与另一台设备(不一定是另
我正在开发一个管理 Wi-Fi 连接的应用程序。我的场景如下:假设整栋楼都有一个名为“testing-tls”的 Wi-Fi 网络。我的应用程序应该只能连接到选定的接入点(基于 BSSID 或 MAC
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
考虑这张 map : 我需要了解Wi-Fi三角测量的基本原理。上图中描绘了该场景。为了实现Wi-Fi三角测量,我至少需要三个Wi-Fi热点及其位置。设置: 为简单起见,假设我有一个 1平方公里x 1平
(^.^)“你好再次抱歉我的英语不好如果有人喜欢纠正我的编辑我将不胜感激” 嗨,如果我可以用我的 iPhone 从 wi-fi 网络、任何源代码、Api、教程等捕获 IV,现在有没有人可以做到这一点谁
我正在考虑创建一个通过 Wi-Fi Direct 传输视频流的应用程序。我已经用谷歌搜索过(甚至在 Stackoverflow 中),但我没有找到指定支持设备的列表。 我的问题是:是否可以在 Sams
我有一个问题,我想获取我的移动 IP 是网络还是Wi-Fi 我也尝试过一些方法,但我不知道为什么我不能得到它 public class MainActivity extends Activity {
我正在开发开箱即用的体验应用程序。我必须连接 来 self 的自定义应用程序的 wi-fi,不使用设备 wifi 设置。 我已经完成了,从 wifi 管理器获取 wi-fi 网络列表。 你能指导我如何
我正在开发一个需要检查互联网连接的 Android 应用程序。当设备的 WI-FI 关闭时它工作得很好但是当我打开 Wi-Fi 但没有连接到可用网络时,它是强制关闭。可能是什么问题?请帮助 bool
我想通过 Wi-Fi Direct 在 2 台设备之间传输文件。 我想做与 WifiDirectDemo 中相同的事情,但我无法将数据从群组所有者传输到另一台设备,所以我尝试了这个:每次当其中一台设备
模拟器可以连wifi吗?由于我没有使用 eclipse 或任何 IDE...我正在尝试将独立的模拟器连接到 Wi-fi 最佳答案 目前,虽然您可以在模拟器中使用计算机的互联网连接,但用它来模拟 Wi-
我正在尝试为大学设置 Qt,但遇到了一些问题。我正在运行 Windows 8,我不确定是哪个版本的 Qt 或 QtCreator,但不是最新的 - 我们获得了版本安装程序,所以我们必须使用这个版本,尽
我有一个运行 Android 的小型电视盒设备。每当我调出 Wi-Fi 接口(interface)时,以太网接口(interface)就会断开连接。如果我随后调出以太网设备、Wi-Fi 接口(inte
我有一个几乎总是需要知道用户位置的应用程序。 当我需要访问某个位置时,我会这样做: final AlertDialog.Builder builder = new AlertDialog.Builde
我正在开发一个基于 WiFi Direct 技术(P2P)的安卓应用,所以我真的需要知道安卓 WiFi 直接性能的范围是多少米。基于 Android API 指南: you can discover
当您连接的 Wi-Fi 无法访问 Internet 时, Android Lollipop 似乎默认为移动数据。有人知道这是否在某处有正式记录吗? 我们有一个应用程序需要通过 Wi-Fi 连接到没有互
我是一名优秀的程序员,十分优秀!