Autore Topic: Determinare il segnale prima di effettuare una chiamata  (Letto 823 volte)

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Determinare il segnale prima di effettuare una chiamata
« il: 29 Novembre 2011, 12:33:56 CET »
0
Buongiorno.
per velocizzare un'applicazione, sto cercando di determinarmi la presenza di segnale prima di effettuare una connessione dati.

Per il momento, ho cercato di utilizzare la classe ServiceState, determinandomi lo stato del segnale col metodo getState(), il quale mi ritorna il codice dello stato del segnale.
Dato che sono sprovvisto di dispositivo mobile in questo momento, esiste un modo per testarlo da emulatore il corretto funzionamento?
Inoltre, è corretto utilizzare SOLTANTO il ServiceState per determinarmi lo stato del segnale?
Ho necessità di utilizzare anche un listener, per capire se ho un cambiamento?

Andrea

Offline alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Re:Determinare il segnale prima di effettuare una chiamata
« Risposta #1 il: 29 Novembre 2011, 12:49:35 CET »
+1
Ciao Grifith,
mi sono occupato recentemente di effettuare delle chiamate con Android.
In pratica il serviceState indica se il Servizio voce è disponibile o meno. Servizio Disponibile, non disponibile, etc.
Con un Listener puoi capire la variazione della potenza del segnale:
Codice (Java): [Seleziona]
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        int events = PhoneStateListener.LISTEN_SIGNAL_STRENGTHS;
        telephonyManager.listen(phoneStateListener, events);
Sei stato aiutato oppure il tuo problema è stato risolto? Allora premi il tasto THANKS E' un modo utile e carino per ringraziare chi ti è stato di aiuto.

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Re:Determinare il segnale prima di effettuare una chiamata
« Risposta #2 il: 29 Novembre 2011, 12:52:45 CET »
0
Ciao Grifith,
mi sono occupato recentemente di effettuare delle chiamate con Android.
In pratica il serviceState indica se il Servizio voce è disponibile o meno. Servizio Disponibile, non disponibile, etc.
Con un Listener puoi capire la variazione della potenza del segnale:
Codice (Java): [Seleziona]
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        int events = PhoneStateListener.LISTEN_SIGNAL_STRENGTHS;
        telephonyManager.listen(phoneStateListener, events);

Grazie mille...
Infatti, poco dopo aver scritto ho cercato di effettuare un test aggiungendo il listener, e mi sono risposto da solo... Che pollo che sono...
Grazie mille per la risposta, pronta e precisa!

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Re:Determinare il segnale prima di effettuare una chiamata
« Risposta #3 il: 30 Novembre 2011, 11:29:38 CET »
0
A quanto pare i problemi non sono finiti.

Avendo più di una activity, ho dovuto realizzare una "serie" di PhoneListener. Uno in ogni Activity. (Per uno totale di tre, per ora...)
Ne ho inserito uno in un'activity dentro l'onCreate della stessa. Ma a quanto pare, non ne vuole di funzionare...
Il codice inserito è il medesimo:
Codice (Java): [Seleziona]
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener ps = new PhoneStateListener(){
        @Override
        public void onServiceStateChanged(ServiceState serviceState){
                connectionState = serviceState.getState();
        }
};
int events = PhoneStateListener.LISTEN_SIGNAL_STRENGTH;
tm.listen(ps, events);
               
Log.println(Log.DEBUG, "ASSENZA SEGNALE", connectionState + " - " + android.telephony.ServiceState.STATE_IN_SERVICE);
               
if(connectionState != android.telephony.ServiceState.STATE_IN_SERVICE){
        new android.os.CountDownTimer(15000, 1000)
        {
                public void onTick(long millisUntilFinished) {
                        t.show();
                 }
                public void onFinish() {
                        t.show();
                }
        }.start();
}else if(t!=null)
        t.cancel();

Dove t non è altro che un Toast che mi visualizza il messaggio. Purtroppo ho notato che il problema non è la visualizzazione, ma proprio che non riesce ad entrare nel Listener.
Idee in merito?
E' possibile che, più di listener aperto, possano dare problemi?

Offline alexAndroid

  • Utente normale
  • ***
  • Post: 185
  • Respect: +27
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Giò
  • Sistema operativo:
    Ubuntu 11.10; Windows XP
Re:Determinare il segnale prima di effettuare una chiamata
« Risposta #4 il: 30 Novembre 2011, 11:37:36 CET »
0
Non so se più listener aperti insieme possano dare problemi, ma per evenienza al passaggio dell'activity fai anche il LISTEN_NONE.
Comunque da quello che ho capito, nel momento in cui lo stato del servizio connectionState non è disponibile ti mostra il Toast.
Può essere che non hai mai avuto modo di non avere il segnale?
Sei stato aiutato oppure il tuo problema è stato risolto? Allora premi il tasto THANKS E' un modo utile e carino per ringraziare chi ti è stato di aiuto.

Offline Grifith

  • Utente junior
  • **
  • Post: 56
  • Respect: +1
    • Mostra profilo
    • La mia prima applicazione...
Re:Determinare il segnale prima di effettuare una chiamata
« Risposta #5 il: 30 Novembre 2011, 11:58:56 CET »
0
Non so se più listener aperti insieme possano dare problemi, ma per evenienza al passaggio dell'activity fai anche il LISTEN_NONE.
Comunque da quello che ho capito, nel momento in cui lo stato del servizio connectionState non è disponibile ti mostra il Toast.
Può essere che non hai mai avuto modo di non avere il segnale?

Cosa intendi per il listen_none? Comunque ho cercato anche di modificare la condizione al contrario, in modo da farmi partire il toast, ma non cambia. Per verificare, ho comunque modificai l'indice a -2, così da evidenziare il cambiamento. Ma non entra per nulla lasciandomi il codice che avevo preimpostato.


EDIT: Ho testato il Listen_none e richiamata la listen, ma il risultato non cambia. Credevo che si potesse trattare di un problema di numero di Listener, ma sia eliminandolo dalla prima Activity che mi viene chiamata, sia elimandolo dal Thread che ho in background, non accade nulla di diverso che dal suo comportamento anomalo...
« Ultima modifica: 30 Novembre 2011, 12:39:56 CET da Grifith »