vin*_*try 13 android android-wifi android-5.0-lollipop
我正在研究Wifi项目,有一个模块可以让用户以编程方式加入wifi.
在kitkat及以下它的工作成功,但在Lollipop它没有工作.
这是代码:
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.SSID = "\"testSSID\"";
wifiConfiguration.hiddenSSID = true;
wifiConfiguration.status = WifiConfiguration.Status.ENABLED;
wifiConfiguration.allowedKeyManagement
.set(WifiConfiguration.KeyMgmt.NONE);
netId = wifiManager.addNetwork(wifiConfiguration);
Log.d("WifiPreference", "add Network returned " + netId);
boolean checkEnableWifi = wifiManager.enableNetwork(netId, true);
Log.d("WifiPreference", "enableNetwork returned " + checkEnableWifi);
Run Code Online (Sandbox Code Playgroud)
我的测试设备是nexus 5内部版本编号LRX21O,我的代码或Lollipop上的bug有问题吗?
在棒棒糖面临类似的问题.
手动禁用其他网络,然后重新连接的wifi管理器解决了这个问题.
boolean enableNework(String ssid, Context cxt) {
boolean state = false;
WifiManager wm = (WifiManager) cxt.getSystemService(Context.WIFI_SERVICE);
if (wm.setWifiEnabled(true)) {
List<WifiConfiguration> networks = wm.getConfiguredNetworks();
Iterator<WifiConfiguration> iterator = networks.iterator();
while (iterator.hasNext()) {
WifiConfiguration wifiConfig = iterator.next();
if (wifiConfig.SSID.equals(ssid))
state = wm.enableNetwork(wifiConfig.networkId, true);
else
wm.disableNetwork(wifiConfig.networkId);
}
wm.reconnect();
}
return state;
}
Run Code Online (Sandbox Code Playgroud)
试试这个.不要禁用其他已保存的网络.因为当您选择的网络不可用时,它会阻碍其他网络上的wifi回退.优先玩.
/*
* Max priority of network to be associated.
*/
private static final int MAX_PRIORITY = 999999;
/**
* Allow a previously configured network to be associated with.
*/
public boolean enableNetwork(String ssid) {
boolean state = false;
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
if(list != null && list.size() > 0) {
for( WifiConfiguration i : list ) {
if(i.SSID != null && i.SSID.equals(convertToQuotedString(ssid))) {
wifiManager.disconnect();
int newPri = getMaxPriority() + 1;
if(newPri >= MAX_PRIORITY) {
// We have reached a rare situation.
newPri = shiftPriorityAndSave();
}
i.priority = newPri;
wifiManager.updateNetwork(i);
wifiManager.saveConfiguration();
state = wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();
break;
}
}
}
return state;
}
private int getMaxPriority() {
final List<WifiConfiguration> configurations = wifiManager.getConfiguredNetworks();
int pri = 0;
for (final WifiConfiguration config : configurations) {
if (config.priority > pri) {
pri = config.priority;
}
}
return pri;
}
private void sortByPriority(final List<WifiConfiguration> configurations) {
Collections.sort(configurations,
new Comparator<WifiConfiguration>() {
@Override
public int compare(WifiConfiguration object1, WifiConfiguration object2) {
return object1.priority - object2.priority;
}
});
}
private int shiftPriorityAndSave() {
final List<WifiConfiguration> configurations = wifiManager.getConfiguredNetworks();
sortByPriority(configurations);
final int size = configurations.size();
for (int i = 0; i < size; i++) {
final WifiConfiguration config = configurations.get(i);
config.priority = i;
wifiManager.updateNetwork(config);
}
wifiManager.saveConfiguration();
return size;
}
/**
* Add quotes to string if not already present.
*
* @param string
* @return
*/
public static String convertToQuotedString(String string) {
if (TextUtils.isEmpty(string)) {
return "";
}
final int lastPos = string.length() - 1;
if (lastPos > 0
&& (string.charAt(0) == '"' && string.charAt(lastPos) == '"')) {
return string;
}
return "\"" + string + "\"";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8148 次 |
| 最近记录: |