Android ненадлежащим образом забывает беспроводные сети

#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.