谷歌在 Android 8 或 9 中引入了一系列关于 Wi-Fi 扫描频率的限制。应用程序在扫描 Wi-Fi 连接的频率方面受到限制,包括 P2P Wi-Fi 对等。Wi-Fi Aware 是什么情况?它有同样的限制吗?绕过它更容易吗?
这个答案是根据 OP 的最新评论。
跟踪网络 RSSI 的一种方法是使用BroadcastReceiver
注册意图RSSI_CHANGED_ACTION,然后从存储的意图的额外值中提取原始 RSSI 值。密钥Wi-FiManager.EXTRA_NEW_RSSI,并使用calculateSignalLevel()获得阈值级别(通常可行值)。一些近似代码:
} else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
// Default to -200 as its below WifiManager.MIN_RSSI.
int rawRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200);
int rssiLevel = mWifiManager.calculateSignalLevel(rawRssi);
}
此外,要回答上一个关于 Wi-Fi 感知设置是否受相同扫描限制的问题,答案是“否”,不是因为它相对于 Wi-Fi-Direct 具有豁免,而是因为它与 Wi-Fi-Direct 连接的操作方式不同。对于 Wi-Fi Direct 连接,需要对基于WifiManager
的开发人员页面进行request()
节流,以启动扫描,并且这些扫描是否被节流
Wi-Fi-Aware 使用不同的范例。如果这与测距的使用有关,则可以在两个设备之间利用 Wi-Fi-Aware 技术,如下所示:
使用context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT);
使用 Wi-Fi-RTTI api 检查是否支持测距
通过注册意图WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED
来检查 Wi-Fi RTT 是否可用,并在其收据上检查 Wi-Fi RTT 是否可用。
从成功的测距结果中提取rssi。
需要注意的一点是,根据框架中的this代码,每个 UID 的测距请求限制为 20。
static final int MAX_QUEUED_PER_UID = 20;
请注意,如果您作为常规应用程序运行,您的应用程序将拥有自己的 UID。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(72条)