Иногда точка доступа Wi-Fi не включается на устройстве Android 5.1

#android #hotspot

#Android #точка доступа

Вопрос:

Мы пытаемся программно включить точку доступа Wi-Fi, но иногда она переходит в бесконечный цикл и не включается, но в основном это работает. Это строка, в которой она зависает «while (!(Логическое значение) isWifiApEnabledMethod.invoke(WifiManager)) { Thread.sleep(500); };» Весь код размещен ниже. Это проблема только с устройствами Android 5.0 / 5.1. Любые входные данные будут оценены.

     WifiManager wifiManager = (WifiManager)getActivity().getApplicationContext().getSystemService   (Context.WIFI_SERVICE);

    //If Wifi is ON then switch it OFF
    if (wifiManager.isWifiEnabled()) {
        wifiManager.setWifiEnabled(false);
    }

    WifiConfiguration netConfig = new WifiConfiguration();
    Random random = new Random();
    int iRandomKey = random.nextInt(65536);

    netConfig.SSID = "TestHotspot";
    netConfig.status = WifiConfiguration.Status.ENABLED;
    netConfig.priority = 40;
    //hiding SSID,
    netConfig.hiddenSSID = true;
    netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
    netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
    netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
    netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);

    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    netConfig.preSharedKey = "testpassword";

    final String RingOfFire_Ssid = netConfig.SSID;
    final String RingOfFire_password = netConfig.preSharedKey;

    try {
        Method setWifiApMethod = wifiManager.getClass().getMethod("setWifiApEnabled",   WifiConfiguration.class, boolean.class);
        boolean apstatus = (Boolean) setWifiApMethod.invoke(wifiManager, netConfig, true);
        Log.d("ConnectWIFI:", "apstatus"   ":"   apstatus);

        Method isWifiApEnabledMethod = wifiManager.getClass().getMethod("isWifiApEnabled");
        while (!(Boolean) isWifiApEnabledMethod.invoke(wifiManager)) {
            Thread.sleep(500);
        };

        Method getWifiApConfigurationMethod = wifiManager.getClass().getMethod("getWifiApConfiguration");
        netConfig = (WifiConfiguration) getWifiApConfigurationMethod.invoke(wifiManager);

        Log.d("ConnectWIFI:", netConfig.SSID   ":"   netConfig.preSharedKey   ":"   "Hotspot");

    } catch (Exception e) {
        Log.e(this.getClass().toString(), "", e);
    }
  

Мы исследовали дальше, и мы получаем лучшее поведение при использовании этого метода

     Class<?> cls=WifiManager.class; 
   for (Method method:cls.getDeclaredMethods()){ 
   String methodName=method.getName(); 
   if (methodName.equals("getWifiApState")){ getWifiApState=method; }
   else if (methodName.equals("isWifiApEnabled")){ isWifiApEnabled=method; }
   else if (methodName.equals("setWifiApEnabled")){ setWifiApEnabled=method; }
   else if (methodName.equals("getWifiApConfiguration")) {       getWifiApConfiguration=method; } }
  

Спасибо

Комментарии:

1. Log.d("ConnectWIFI:", "apstatus" ":" apstatus); . Видели ли вы различия в appstatus том, когда это происходит?

2. Нет, я не уверен, что вы имеете в виду. Мы отправились дальше, и мы получим лучшее поведение при использовании этого метода класса <?> ЦБС=WifiManager.class; для (метод:ЦБС.getDeclaredMethods()){ строка имяметода=метод.метод getname(); если (имя_метода.метод Equals(«getWifiApState»)){ getWifiApState=метод; }еще если (имя_метода.метод Equals(«isWifiApEnabled»)){ isWifiApEnabled=метод; }еще если (имя_метода.метод Equals(«setWifiApEnabled»)){ setWifiApEnabled=метод; }еще если (имя_метода.метод Equals(«getWifiApConfiguration»)) { getWifiApConfiguration=метод; } }

3. Как упоминалось в github.com/ProjectSPAN/android-manet-manager/blob/master/… Но все же иногда это не работает

4. Я не могу прочитать код в комментариях! Можете ли вы? Пожалуйста, поместите это в дополнительный блок кода в своем сообщении.

5. I am not sure what you mean . Ну, что обычно регистрируется? И что регистрируется, если оно зависает? Отличается ли это?