在我们的应用程序中,我们处理启动到设备的WiFi连接,该设备广播其自己的无线接入点(没有互联网连接)以进行直接通信 .
它在我们所有的测试设备上都能很好地工作;然而,我们收到用户的报告,在某些三星设备(Galaxy S4,Galaxy Note 3)上,在Wi-Fi设置下有一个名为“自动网络切换”的设置,三星已经添加了这个设置,寻找“不稳定”的网络,以及将自动断开连接并恢复为移动数据 . 不幸的是,由于我们的设备没有互联网连接,三星将其报告为不稳定的网络并立即断开连接 .
我没有这些设备可用于测试,所以我很好奇是否有其他人知道这个问题或知道如何以编程方式禁用此设置或解决它?
我们用于连接的代码是:
/**
* Attempt to connect to an open wifi network with the given SSID
* @param ssid the SSID of the unsecured wireless network to connect to
*/
public static void connectToOpenNetwork (String ssid) {
WifiManager mgr = getManager();
WifiConfiguration configuration = getOpenWifiConfiguration(ssid);
mgr.addNetwork(configuration);
mgr.saveConfiguration();
int res = findOpenNetworkId(ssid);
if (res != INVALID_NETWORK_ID) {
mgr.enableNetwork(res, true);
mgr.reconnect();
} else {
Log.e(TAG, "Received request to connect to network " + ssid + " but the network was not found in the configurations.");
}
}
/**
* Get a WifiConfiguration object configured for an unsecured wireless network with the
* given SSID.
* @param ssid the SSID of the network to configure
* @return a WifiConfiguration object that can be passed to
* {@link WifiManager#addNetwork(android.net.wifi.WifiConfiguration)}
*/
private static WifiConfiguration getOpenWifiConfiguration (String ssid) {
WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"" + ssid + "\"";
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
return config;
}
1 回答
编辑:所以,对那些感兴趣的人进一步研究,它似乎是基于4.3的三星Touchwiz版本中添加的功能 . 在内部,该设置名为"wifi_watchdog_connectivity_check" . 我仍然使用下面的代码来查看我是否能够检查设置是否已启用,但否则我将打开'd have to assume it' .
所以我发现,在您尝试 Build 连接并且操作系统切换远离网络后,Wi-Fi配置处于"disabled"状态 . 因此,在问题发生后,您可以通过检查
WifiManager
中的配置状态来检测它是否已发生 .然后,您可以尝试从系统设置应用程序中解析设置的名称:
然后用它来获取字符串:
如果字符串存在,这将返回当前用户语言的本地化字符串 .
对于任何对此结果感兴趣的人,事实证明这个选项实际上是一个Android设置,但它似乎在这些三星设备上更具侵略性 . 该设置是
android.provider.Settings.java
中的隐藏设置:对于
API == 15 || API == 16
,Settings$Secure
为API >= 17
,Settings$Global
为API >= 17
. 这不是第三方应用程序可以启用或禁用的设置;但是,可以检测并警告它 . 我的解决方案是:为了更好地衡量,您可以通过
Intent
将用户定向到高级Wi-Fi设置:有趣的琐事:这个
Intent
带来与设置> Wi-Fi>高级相同的Activity
,但会显示不同的 Headers (IP设置,高级Wi-Fi) .