NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
00
Člen
Avatar
00:19.8.2016 12:52

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
19.8.2016 12:52
Avatar
Bohumír záviš:25.8.2016 17:09

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.8.2016 17:09
Avatar
00
Člen
Avatar
Odpovídá na Bohumír záviš
00:26.8.2016 12:52

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

 
Nahoru Odpovědět
26.8.2016 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.