Autore Topic: attivazione wifi  (Letto 1804 volte)

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
attivazione wifi
« il: 01 Ottobre 2013, 17:05:27 CEST »
0
Salve a tutti,
ho una questione da sottoporvi.
all'avvio della mia app attivo il wifi e successivamente si attiva un task asincrono in cui è contenuta una post. Esso si attiva all'interno di un do while solo quando il wifi è abilitato ma quello che accade è che in realtà non è pronto per la comunicazione e la post non avviene. Come posso risolvere secondo voi?
Se deve usare un handler potreste anche segnalarmi un tutorial o roba simile per capire meglio il funzionamento?
Grazie a tutti.

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:attivazione wifi
« Risposta #1 il: 01 Ottobre 2013, 19:55:07 CEST »
0
Usa banalmente un flag con un while dove all'interno inserisci il tuo do while! Che tipo di connessione wi-fi instauri? TcpIp?
Andrea

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:attivazione wifi
« Risposta #2 il: 02 Ottobre 2013, 10:23:16 CEST »
0
si TcpIp, ho appena provato ma il risultato è lo stesso...

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:attivazione wifi
« Risposta #3 il: 02 Ottobre 2013, 12:07:11 CEST »
0
Puoi postare il codice (commentato :-) )dove instauri la connessione e dove si verifica il problema?
Andrea

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:attivazione wifi
« Risposta #4 il: 03 Ottobre 2013, 09:41:02 CEST »
0
Codice: [Seleziona]
public void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.splash);
                connessione2=false;
               
                WifiManager wifi;
               
                wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE);
                wifi.setWifiEnabled(true);//Turn on Wifi
                connessione=wifi.getWifiState();
               
               
                Handler handler = new Handler();
                handler.postDelayed(this, 3000);
                stato=false;
                con = this;
       
               
                copyFiles();
               
               
                while(!connessione3&&!connessione2&&connessione==3){
                       
                        System.out.println("connes"+connessione3);
                do{
                if(connessione==3){               
                connessione2=true;
                connessione3=isNetworkAvailable();
               
                 }
                else{
                        connessione2=false;
                        connessione=wifi.getWifiState();
                        break;
                        }
                System.out.println(connessione3);
                dialog = ProgressDialog.show(SplashActivity.this, "", "Attendi...", false, true);
                 mAuthTask = new TaskAsincrono();
                 mAuthTask.execute((Void) null);
                }
                while(!connessione2);
               
[code=java]

Non credo ci sia bisogno dei commenti, dopo aver attivato il wifi si attiva un task asincrono che deve realizzare una post(task asincrono è l'unico modo per non dare problemi) nonostante la connessione sia verificata attiva la post non riesce.

Post unito: 03 Ottobre 2013, 09:41:57 CEST
scusate ho sbagliato con i tag.

Offline uglyicons

  • Utente junior
  • **
  • Post: 88
  • UglyIcons - Great Apps (perlomeno ci proviamo)
  • Respect: +3
    • Mostra profilo
    • La mia app: EML Reader FREE
  • Dispositivo Android:
    Huawei Honour
  • Play Store ID:
    UglyIcons
  • Sistema operativo:
    Win
Re:attivazione wifi
« Risposta #5 il: 03 Ottobre 2013, 10:10:07 CEST »
0
Ciao

Credo che sia un problema di tempistiche... aggiungerei un controllo che un sito noto sia raggiungibile (tipo www.google.it) in modo da essere certi che tutto sia già partito (banalmente che la risoluzione dei nomi funzioni, etc).
EML Reader FREE
Apri file e allegati EML e MSG da qualsiasi fonte.
Download su Play Store!

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:attivazione wifi
« Risposta #6 il: 03 Ottobre 2013, 10:12:20 CEST »
0
ciao, grazie per la tua risposta, credo di si, anzi sono praticamente sicuro che sia così, soltanto non riesco a far fare prima una cosa e poi l'altra

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:attivazione wifi
« Risposta #7 il: 03 Ottobre 2013, 10:30:05 CEST »
0
Non mi torna molto la struttura con un asynctask dentro un do {} che a sua volta è dentro un while {}. Qualche commento sul perchè di questa struttura aiuterebbe.

Io come commento generale consiglio di mettere tutto dentro all'AsyncTask, anche l'attivazione della connessione e l'attesa sino a che non è stabilita.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline uglyicons

  • Utente junior
  • **
  • Post: 88
  • UglyIcons - Great Apps (perlomeno ci proviamo)
  • Respect: +3
    • Mostra profilo
    • La mia app: EML Reader FREE
  • Dispositivo Android:
    Huawei Honour
  • Play Store ID:
    UglyIcons
  • Sistema operativo:
    Win
Re:attivazione wifi
« Risposta #8 il: 03 Ottobre 2013, 10:40:22 CEST »
+1
+1 su bradipao...

Per controllare la connettività reale in passato ho usato questa funzione (non so se sia ottimale ma funziona)

Codice (Java): [Seleziona]
        public boolean isNetworkConnected() {

                boolean esito = false;

                HttpClient httpClient = new DefaultHttpClient();

                try {
                        URI url = null;
                        url = new URI("http://mail.google.com/");

                        HttpGet httpget = new HttpGet(url);
                        HttpContext httpcontext = new BasicHttpContext();
                        HttpResponse response = httpClient.execute(httpget, httpcontext);

                        if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
                                esito = true;
                        }

                } catch (URISyntaxException e1) {
                        // TODO gestire
                } catch (ClientProtocolException e) {
                        // TODO gestire
                } catch (IOException e) {
                        // TODO gestire
                } finally {
                        // TODO gestire
                }

                return esito;
        }
       
EML Reader FREE
Apri file e allegati EML e MSG da qualsiasi fonte.
Download su Play Store!

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:attivazione wifi
« Risposta #9 il: 03 Ottobre 2013, 10:45:20 CEST »
0
ok ciò che vorrei fare è attivare il wifi qualora non fosse accesso e una volta verificata la connessione, che praticamente verifico con una classe simile a quella postata, vorrei realizzare la postwhile e do while era solo per sperare di attendere a sufficienza affinché la post vada a buon fine e quindi abbia la connessione a disposizione

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:attivazione wifi
« Risposta #10 il: 03 Ottobre 2013, 11:33:23 CEST »
0
+1 su bradipao...

Per controllare la connettività reale in passato ho usato questa funzione (non so se sia ottimale ma funziona)

Codice (Java): [Seleziona]
        public boolean isNetworkConnected() {

                boolean esito = false;

                HttpClient httpClient = new DefaultHttpClient();

                try {
                        URI url = null;
                        url = new URI("http://mail.google.com/");

                        HttpGet httpget = new HttpGet(url);
                        HttpContext httpcontext = new BasicHttpContext();
                        HttpResponse response = httpClient.execute(httpget, httpcontext);

                        if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
                                esito = true;
                        }

                } catch (URISyntaxException e1) {
                        // TODO gestire
                } catch (ClientProtocolException e) {
                        // TODO gestire
                } catch (IOException e) {
                        // TODO gestire
                } finally {
                        // TODO gestire
                }

                return esito;
        }
       

Perchè fare un http get? Basterebbe un http head :)

Offline uglyicons

  • Utente junior
  • **
  • Post: 88
  • UglyIcons - Great Apps (perlomeno ci proviamo)
  • Respect: +3
    • Mostra profilo
    • La mia app: EML Reader FREE
  • Dispositivo Android:
    Huawei Honour
  • Play Store ID:
    UglyIcons
  • Sistema operativo:
    Win
Re:attivazione wifi
« Risposta #11 il: 03 Ottobre 2013, 11:36:38 CEST »
0
Vero ! Con un head prendi solo l'header senza bisogno di scaricare tutta la pagina.

Giustissimo !

(nel mio caso originario mi serviva il get perché controllavo di non essere dietro un captive portal, ma in questo caso probabilmente basta head)
EML Reader FREE
Apri file e allegati EML e MSG da qualsiasi fonte.
Download su Play Store!

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:attivazione wifi
« Risposta #12 il: 03 Ottobre 2013, 12:00:36 CEST »
0
ma vi devo ripostare il codice commentato oppure mi potete dare lo stesso una mano?

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:attivazione wifi
« Risposta #13 il: 03 Ottobre 2013, 12:30:37 CEST »
0
Qualcosa mi sfugge nella discussione.

all'avvio della mia app attivo il wifi e successivamente si attiva un task asincrono in cui è contenuta una post. Esso si attiva all'interno di un do while solo quando il wifi è abilitato ma quello che accade è che in realtà non è pronto per la comunicazione e la post non avviene. Come posso risolvere secondo voi?

Perchè non utilizzare un broadcast Receiver per intercettare quando la wifi si è attivata, anzichè usare cicli while?
Puoi usare
Codice (Java): [Seleziona]
WIFI_STATE_CHANGED_ACTION
NETWORK_STATE_CHANGED_ACTION


Per il controllo della connettività perchè non usare un banale:

Codice (Java): [Seleziona]
ConnectivityManager cm =
        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
 
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();

anziche fare una chiamata http. Avete casi di falsi positivi?

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:attivazione wifi
« Risposta #14 il: 03 Ottobre 2013, 12:49:12 CEST »
0
in realtà non usavo la chiamata http ma tra le varie soluzioni è stata una di quelle consigliate. io usavo:
Codice (Java): [Seleziona]
private boolean isNetworkAvailable() {  
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);  
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();  
    return activeNetworkInfo != null;  
}  


quello che però mi interessa fare è:
1)controllare se il wifi è attivato
2) se no attivarlo.
3) essere sicuro del funzionamento della connessione
4)realizzare una post.

Per ora avevo pensato a questo

Codice (Java): [Seleziona]
while(!connessione3){                  //dove connessione3 verifica proprio lo stato della connessione cioè la funzione postata prima
                       
                        System.out.println("connes"+connessione3);
                do{
                if(connessione==3){             //connessione verifica lo stato del wifi: è un intero e se ==3 è attivo.
                connessione2=true;                  connessione2 la uso come variabile di appoggio per uscire dal ciclo ed è true quando connessione==3
                connessione3=isNetworkAvailable();  
               
                 }
                else{
                        connessione2=false;
                        connessione=wifi.getWifiState();
                        break;
                        }
                System.out.println(connessione3);
                dialog = ProgressDialog.show(SplashActivity.this, "", "Attendi...", false, true);
                 mAuthTask = new TaskAsincrono();                      nel task asincrono c'è la post
                 mAuthTask.execute((Void) null);
                }
                while(!connessione2);

Ditemi se serve altro