Diskuze: [android] Na Samsung Galaxy Chat nefunguje WifiManager.addNetwork(config)

Java Java [android] Na Samsung Galaxy Chat nefunguje WifiManager.addNetwork(config)

Avatar
00
Člen
Avatar
00:

Mám problém s WifiManagerem na Android 4.1.2 na Samsung Galaxy Chat (na GSmart classic vše funguje správně). Moje aplikace by měla zařízení připojit na specifickou Wifi a komunikovat s Raspberry pi3 (jako Wifi hotspot) přes něco, jako telnet. Zde je můj kód:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { // Disables mobile data on lolipop for access to no-internet Wifi
                                    TelephonyManager telephonyService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

                                    Method setMobileDataEnabledMethod = null;
                                    try {
                                        setMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("setDataEnabled", boolean.class);
                                    } catch (NoSuchMethodException e) {
                                        e.printStackTrace();
                                    }

                                    if (null != setMobileDataEnabledMethod) {
                                        try {
                                            setMobileDataEnabledMethod.invoke(telephonyService, false);
                                        } catch (IllegalAccessException e) {
                                            e.printStackTrace();
                                        } catch (InvocationTargetException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                }

                                WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                                for (WifiConfiguration configuration : wifiManager.getConfiguredNetworks()) {
                                    if (configuration.SSID.startsWith("WIFI")) {
                                        wifiManager.removeNetwork(configuration.networkId);
                                    } else {
                                        wifiManager.disableNetwork(configuration.networkId);
                                    }
                                }
                                WifiConfiguration newConfiguration = new WifiConfiguration();
                                newConfiguration.SSID = "WIFI".concat(id).concat("");
                                newConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                                wifiManager.addNetwork(newConfiguration);
                                wifiManager.disconnect();
                                wifiManager.enableNetwork(newConfiguration.networkId, true);
                                wifiManager.saveConfiguration();
                                //wifiManager.reconnect();

                                while (!wifiManager.getConnectionInfo().getSSID().equals("\"WIFI".concat(id).concat("\""))) { // Čekání na správně SSID - TADY ČEKÁ POŘÁD, V NASTAVENÍCH SE NOVÁ SÍŤ NEUKAZUJE
                                    try {
                                        Thread.sleep(100);
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                }

                                try { // Počkání na připojení (občas je potřeba počkat - asi)
                                    Thread.sleep(10000);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }

                                    try { // Toho si nevšímejte, to je už jen připojení k serveru
                                        socket = new Socket(InetAddress.getByName(context.getString(R.string.server_ip)), Integer.parseInt(context.getString(R.string.server_port)));
                                        writer = new PrintWriter(socket.getOutputStream());
                                        reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                        ok.run();
                                        break;
                                    } catch (IOException e) {
                                            e.printStackTrace();
                                    }

Kód je docela dlouhý a nepěkný, omlouvám se (poznámka pro ty, kteří pořád jezdí k posuvníku: posouvat se dá i chycením a tažením prostředním kolečkem)

Zdá se, že je třeba nějaké další oprávnění. Mám tyhle:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Problém je v tom, že se nová WiFi nepřidá. (ani v nastaveních ji nevidím) A sám si asi neporadím, protože to žádnou výjimku nepíše.

GOOGLE JSEM POUŽIL A TAK MI NEPIŠTE, AŤ HLEDÁM
 
Odpovědět  -1 19. srpna 12:52
Avatar
Bohumír záviš
Redaktor
Avatar
Bohumír záviš:

Problém je v téhle podmínce

if (android.os.Bu­ild.VERSION.SDK_INT >= android.os.Bu­ild.VERSION_CO­DES.LOLLIPOP)

Běží to pouze na zařízeních která mají sdk level větší nebo stejný jako LOLLIPOP
Řešení odstranit podmínku

 
Nahoru Odpovědět 25. srpna 17:09
Avatar
00
Člen
Avatar
Odpovídá na Bohumír záviš
00:

Na jiném mobilu se stejnou verzí (4.1.2) to jde.

 
Nahoru Odpovědět 26. srpna 12:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.