Autore Topic: controllare se la connessione è accesa  (Letto 3222 volte)

Offline Ansem

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC HD2
  • Sistema operativo:
    4.0.4
controllare se la connessione è accesa
« il: 01 Giugno 2012, 16:29:34 CEST »
0
Raga cosa dovrei mettere nell'if per sapere se sul telefono è attiva o meno la connessione dati?E che permessi mi servono per eseguire questo controllo?

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3

Offline Ansem

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC HD2
  • Sistema operativo:
    4.0.4
Re:controllare se la connessione è accesa
« Risposta #2 il: 01 Giugno 2012, 18:19:21 CEST »
0
qui in sostanza verrebbe:
Codice: [Seleziona]
ConnectivityManager cm =
        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
 
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork.isConnectedOrConnecting();
if(isConnected==true){-----}
senza dover mettere nessun permesso specifico a parte quello per utilizzare internet giusto? :)

Offline Ansem

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC HD2
  • Sistema operativo:
    4.0.4
Re:controllare se la connessione è accesa
« Risposta #3 il: 02 Giugno 2012, 11:22:04 CEST »
0
raga ma perchè mi da errore?
Codice: [Seleziona]
super.onCreate(savedInstanceState);
                        setContentView(R.layout.main);
                       
                        //controllo se è accesa la connessione
                        Activity context = null;
                        ConnectivityManager cm =
                                (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
                         
                        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                        boolean isConnected = activeNetwork.isConnectedOrConnecting();
                        if(isConnected==true){final AlertDialog.Builder builder=new AlertDialog.Builder(this);
                        builder.setTitle("Attenzione!");
                        builder.setMessage("L'applicazione senza la connessione ad internet non può funzionare. La preghiamo di attivarla.");
                        builder.setIcon(android.R.drawable.ic_dialog_alert);
                        builder.setPositiveButton("OK", new OnClickListener() {

                                public void onClick(DialogInterface dialog, int which) {
                               
                                }
                        });
                        builder.show();}
                }

la causa è questa:
Caused by: java.lang.NullPointerException
at com.homelinux.agnese.EasyParkingActivity.onCreate(EasyParkingActivity.java:43)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:controllare se la connessione è accesa
« Risposta #4 il: 02 Giugno 2012, 11:25:34 CEST »
0
NullPointerExeception vuol dire che stai chiamando un metodo su un oggetto che è a null

Codice (Java): [Seleziona]
                        Activity context = null;
                        ConnectivityManager cm =
                                (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

Cosa vedi qui?

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:controllare se la connessione è accesa
« Risposta #5 il: 02 Giugno 2012, 11:36:22 CEST »
0
Activity è nella colonna di generi di Context, quindi eredita il metodo getSystemService. Non hai bisogno di una istanza di Context, basta fare riferimento con this (anche in forma implicita, chiamando direttamente il metodo).

Offline Ansem

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC HD2
  • Sistema operativo:
    4.0.4
Re:controllare se la connessione è accesa
« Risposta #6 il: 02 Giugno 2012, 11:48:42 CEST »
0
scusate ma sono poco pratico di java ed android. in pratica come dovrebbe essere il codice perchè context sia corretto?
ho provato a scriverlo così:
Codice: [Seleziona]
                        ConnectivityManager cm =
                                (ConnectivityManager)this.context.getSystemService(Context.CONNECTIVITY_SERVICE);
ma mi da questo errore:
Multiple markers at this line
   - context cannot be resolved or is not a field
   - Null pointer access: The variable context can only be null at this    location

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:controllare se la connessione è accesa
« Risposta #7 il: 02 Giugno 2012, 11:54:21 CEST »
+1
getSystemService() è un metodo della classe Context. Quindi se context è un oggetto di tipo Context, puoi scrivere:

Codice (Java): [Seleziona]
context.getSystemService(Context.CONNECTIVITY_SERVICE);
Ora, Activity eredita da Context, quindi eredita i suoi metodi public/protected. Ergo, se mActivity è un oggetto di tipo Activity, potresti scrivere:

Codice (Java): [Seleziona]
mActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
Dato che sei nell'Activity, puoi scrivere:

Codice (Java): [Seleziona]
this.getSystemService(Context.CONNECTIVITY_SERVICE);
oppure, omettendo il this:

Codice (Java): [Seleziona]
getSystemService(Context.CONNECTIVITY_SERVICE);

Offline Ansem

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC HD2
  • Sistema operativo:
    4.0.4
Re:controllare se la connessione è accesa
« Risposta #8 il: 02 Giugno 2012, 12:21:44 CEST »
0
niente da fare. anche scrivendolo così:
Codice: [Seleziona]
//controllo se è accesa la connessione
                        ConnectivityManager cm =
                                (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
                         
                        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                        boolean isConnected = activeNetwork.isConnectedOrConnecting();
                        if(isConnected==true){...}
mi da force close questo errore:
Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10034 nor current process has android.permission.ACCESS_NETWORK_STATE.

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:controllare se la connessione è accesa
« Risposta #9 il: 02 Giugno 2012, 12:23:22 CEST »
+1
Codice (Java): [Seleziona]
Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10034 nor current process has android.permission.ACCESS_NETWORK_STATE.
É abbastanza esplicito: ti manca il permesso ACCESS_NETWORK_STATE.

Offline Ansem

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC HD2
  • Sistema operativo:
    4.0.4
Re:controllare se la connessione è accesa
« Risposta #10 il: 02 Giugno 2012, 13:07:27 CEST »
0
grazie mille :D ora funziona tutto :)

Offline Ansem

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC HD2
  • Sistema operativo:
    4.0.4
Re:controllare se la connessione è accesa
« Risposta #11 il: 02 Giugno 2012, 15:46:27 CEST »
0
Raga come non detto,a quanto pare l'applicazione crasha se non c'è la connessione internet :( l'errore è sempre il nullpointer :/
Codice: [Seleziona]
//controllo se è accesa la connessione
                        ConnectivityManager cm =
                                (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
                         
                        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                        boolean isConnected = activeNetwork.isConnectedOrConnecting();
                        //controllo se sono connesso
                        if(isConnected==false){
                                final AlertDialog.Builder builder=new AlertDialog.Builder(this);
                        builder.setTitle("Attenzione!");
                        builder.setMessage("L'applicazione senza la connessione ad internet non può funzionare. La preghiamo di attivarla.");
                        builder.setIcon(android.R.drawable.ic_dialog_alert);
                        builder.setPositiveButton("OK", new OnClickListener() {

                                public void onClick(DialogInterface dialog, int which) {
                               
                                }
                        });
                        builder.show();}

non riesco a capire come devo fare per evitare questo problema :(

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:controllare se la connessione è accesa
« Risposta #12 il: 02 Giugno 2012, 15:48:28 CEST »
0
Fai un pò di attenzione al codice che copiaincolli:

 
Citazione
boolean isConnected = activeNetwork.isConnectedOrConnecting();

Questo non ti assicura che ci sia connessione.

Offline Ansem

  • Utente junior
  • **
  • Post: 107
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC HD2
  • Sistema operativo:
    4.0.4
Re:controllare se la connessione è accesa
« Risposta #13 il: 02 Giugno 2012, 16:16:06 CEST »
0
Fai un pò di attenzione al codice che copiaincolli:

 
Questo non ti assicura che ci sia connessione.
scusa ma allora a che dovrebbe servire?sul sito della google c'è scritto che serve quel codice per sapere se il telefono è connesso o meno ad internet :/
E soprattutto cosa dovrei utilizzare allora per sapere se sono connesso ad internet (tremite wifi o 3g) o no?

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:controllare se la connessione è accesa
« Risposta #14 il: 02 Giugno 2012, 16:20:00 CEST »
0
http://developer.android.com/reference/android/net/NetworkInfo.html#isConnectedOrConnecting()
Certo che anche il nome del metodo aiuta a capire...connected OR connecting.