#android #wireless
#Android #беспроводная
Вопрос:
Я написал приложение для простого подключения устройств Android к различным беспроводным сетям нашей компании. Он предназначен для запуска один раз, когда устройство распаковано и настроено с остальной частью нашего набора приложений.
Проблема в том, что иногда устройство забывает сети, не получив соответствующего указания. К сожалению, я не смог воспроизвести это. Я надеюсь, что я пропустил какой-то вызов API, который здешние гуру Android могут помочь мне найти.
Приведенный ниже код взят из моего приложения для инициализации беспроводной сети при однократном запуске, с измененными именами сетей и ключами. Кто-нибудь может увидеть, что я здесь делаю неправильно?
Редактировать: Устройство, на котором я наблюдал такое поведение, является LG Ally. Я надеюсь, что это ошибка в моем собственном коде, так что с этого я и начинаю.
@Override
public void onCreate(Bundle savedInstanceState)
{
WifiConfiguration n1Config = new WifiConfiguration();
n1Config.SSID = ""networkOne"";
n1Config.preSharedKey = ""..."";
n1Config.status = WifiConfiguration.Status.ENABLED;
WifiConfiguration n2Config = new WifiConfiguration();
n2Config.SSID = ""networkTwo"";
n2Config.hiddenSSID = true;
n2Config.wepKeys[0] = "...";
n2Config.wepTxKeyIndex = 0;
n2Config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
n2Config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
n2Config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
n2Config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
n2Config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
n2Config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
n2Config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
n2Config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
n2Config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
n2Config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
n2Config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
n2Config.status = WifiConfiguration.Status.ENABLED;
WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
int n1ID = wifiManager.addNetwork(n1Config);
wifiManager.enableNetwork(n1ID, false);
int n2ID = wifiManager.addNetwork(n2Config);
wifiManager.enableNetwork(n2ID, false);
}
Комментарии:
1. Может ли быть что-то настолько простое, что может существовать конечное число сетей, которые Android может запомнить? Например, Android запомнит только X количество сетей, и при определенных обстоятельствах, если пользователь переходит в зону действия X сетей с момента последнего использования сети вашей компании, ваша сеть вытесняется из сетевого «кэша». По общему признанию, это кажется маловероятным, но может быть протестировано довольно легко.
2. Вы уверены, что кто-то не сказал ему забыть об этом?
Ответ №1:
Я полагаю, вам нужно вызвать wifi.saveConfiguration(); после того, как вы добавили обе свои конфигурации в WifiManager.
Комментарии:
1. Тьфу, непростительный промах. Это почти наверняка моя проблема. Я проведу некоторое тестирование. Большое спасибо за ваш ответ.
2. Хорошо. Дайте мне знать, если это окажется решением. Я сам начинаю разработку Android.