Разница между использованием Java для подключения к adhoc wifi или сделать это вручную

#java #android #wifi #adhoc

#java #Android #wifi #adhoc

Вопрос:

Странная проблема, которая у меня здесь.

Я создаю приложение, которое подключается к беспроводной сети adhoc с камеры. (Таким образом, в wifi нет подключения к Интернету).

Вот код Java, который я использую, чтобы иметь возможность автоматически подключать телефон Android к Wi-Fi камеры:

     WifiConfiguration conf = new WifiConfiguration();
    conf.SSID = """   networkSSID   """;
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

    wifiManager.addNetwork(conf);
   LocalBroadcastManager.getInstance(context).registerReceiver(mWifiScanReceiver, new IntentFilter(TAG_WIFI_CONNECTED));

    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
    for( WifiConfiguration i : list ) {
        if(i.SSID != null amp;amp; i.SSID.contains(networkSSID)) {
            if (old_networkId != i.networkId amp;amp; wifiManager.getConnectionInfo() != null)
                old_networkId = wifiManager.getConnectionInfo().getNetworkId();
            wifiManager.disconnect();
            sicilia_ssid = networkSSID;

            wifiManager.enableNetwork(i.networkId, true);
            wifiManager.reconnect();
            break;
        }
    }
  

Этот код работает: устройство подключается к Wi-Fi, который я хочу, но:

Вот в чем проблема

Я использую определенный API для диалога с камерой. Если я использую этот код для подключения к wifi, API не будет работать. Но если я подключусь к Wi-Fi вручную (с помощью приложения «Настройки»), проблем не возникнет… Если я отключу сотовые данные, я могу использовать код для автоматического подключения к камере. Похоже, что сотовые данные имеют приоритет над adhoc wifi, но только тогда, когда соединение было установлено в коде Java…

Итак, в чем разница между обоими способами? Нужно ли мне добавить еще немного кода? Большое вам спасибо!

Ответ №1:

Я нашел решение здесь :

«Начиная с Lollipop, ОС стала немного более интеллектуальной, позволяя использовать несколько сетевых подключений и не направлять данные в сети, у которых нет подключения к Интернету»

Итак, я добавил этот код после установления соединения:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        Network current_network = null;
        for (Network n : cm.getAllNetworks())
        {
            if (cm.getNetworkInfo(n).getTypeName().equals("WIFI")) {
                current_network = n;
                break;
            }
        }

        if (current_network != null)
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
                cm.bindProcessToNetwork(current_network);
            else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                ConnectivityManager.setProcessDefaultNetwork(current_network);
            }
        }
    }