Italian SignalStrengths

AlpVir

Well-Known Member
Licensed User
Longtime User
La mappa di Google allegata raffigura una traccia GPS (rossa) con dei marker, blu se c'è connessione ad internet e giallo se questa connessione è del tutto assente. Se volessi, punto per punto, misurare il valore numerico del segnale GSM (corrispondenti alle famose "tacche") come potrei fare, visto che il codice

B4X:
Sub PSL_onSignalStrengthsChanged (signalStrength As String)
    Dim ele()        As String    
    Dim segnale        As String
    LogColor(signalStrength,Colors.Red)
    ele=Regex.Split(" ",signalStrength)
    segnale=ele(8)
    LogColor("Segnale=" & segnale,Colors.red)
    ToastMessageShow(segnale,False)
End Sub

mi restituisce sempre un bel "99" (anche se scendo in cantina dove ci sono solo 2 "tacche") ?
Grazie per l'attenzione.

mappina.jpg
 

MarcoRome

Expert
Licensed User
Longtime User
Guarda anche QUESTA Libreria, penso faccia al caso tuo

B4X:
....
'Callback invoked when network signal strengths changes.
'you can use getCDma, etc to get the network connection.
Sub PSL_onSignalStrengthsChanged (signalStrength As String)
   ToastMessageShow(signalStrength, False)
   ToastMessageShow(PSL.CdmaDbm, False)
End Sub
......
 
Last edited:

AlpVir

Well-Known Member
Licensed User
Longtime User
Utilizzo la libreria PhoneStateListener (in altro modo non mi risulta sia possibile leggere il valore del segnale GSM).
Avevo già letto TUTTI i post che vengon fuori cercando PhoneStateListener e/o signalStrength, ma il risultato è sempre invariabilmente l'ottimistico "99", anche quando ci son 2 tacche.
 

MarcoRome

Expert
Licensed User
Longtime User
Potrebbe anche essere che il tuo ( nostro dispositivo funziona su frequenze diverse ) , se non ricordo male SignalStrengthsChanged è basato su rete GSM
  • Tim di Telecom Italia ha una copertura totale su reti 2G, 3G e 4G. Queste le frequenze:
    2G GSM 900/1800 (GPRS, EDGE)
    3G 900/2100 MHz UMTS, HSDPA, HSUPA, HSPA+, DC-HSPA+
    4G 800/1800/2600 MHz LTE, LTE-A
  • Vodafone ha anch’essa un vasto range di frequenze:
    2G GSM 900/1800 (GPRS, EDGE)
    3G 900/2100 MHz UMTS, HSDPA, HSUPA, HSPA+, DC-HSPA+
    4G 800/1800/2600 MHz LTE, LTE-A
  • Wind è attiva su bande di frequenza paragonabili agli altri operatori:
    2G GSM 900/1800 MHz (GPRS, EDGE)
    3G 900/2100 MHz UMTS, HSDPA, HSUPA, HSPA+, DC-HSPA+
    4G 800/2600 MHz LTE....
Leggi anche QUESTO

Se utilizzi
  • isGSM As Boolean
cosa torna ?
 

AlpVir

Well-Known Member
Licensed User
Longtime User
isGSM è true
A me risulta che signalStrength della sub PSL_onSignalStrengthsChanged non varia minimamente sia che operi nel mio studio (4 tacche) che in cantina (2 tacche).
Allego il mio progettino che serve per testare la libreria in questione.
Ovviamente ho inserito nel manifest una serie di permessi, taluno dei quali forse inutile :
AddPermission("android.permission.ACCESS_COARSE_LOCATION")
AddPermission("android.permission.ACCESS_NETWORK_STATE")
AddPermission("android.permission.CHANGE_NETWORK_STATE")
AddPermission("android.permission.ACCESS_COARSE_UPDATES")
AddPermission("android.permission.READ_PHONE_STATE")

Ho una vaga impressione. La causa potrebbe (condizionale) essere la medesima che non consente ad un codice standard di ricavare il numero telefonico dello smartphone.
Questo perchè il mio operatore è la TIM ma il numero è registratoto dalla Vodafone, mio primo operatore (ho cambiato contratto).
Vorrà dire qualcosa ?
Io però le 4 (o 3 o 2) tacche le vedo !
 

Attachments

  • Prova_PhoneStateListener.zip
    7.3 KB · Views: 222

MarcoRome

Expert
Licensed User
Longtime User
Ciao Alp, ho provato la tua app ( mi sono dimenticato di risponderti ), nel mio caso i valori cambiano, oltre al 99 vedi i valori 0, 2, 5, 7 etc... più tacche ci sono più il valore si alza...e viceversa. prova a scartare per un attimo il valore 99 e vedi quali altri valori tornano
 

MarcoRome

Expert
Licensed User
Longtime User
Leggi anche questo: https://stackoverflow.com/questions/7396142/how-to-determine-signal-strength-when-gsm-returns-99
I codici validi sono da (0-31) , 99
Guarda anche questi due spezzoni di codice:

B4X:
public class SignalStrength implements Parcelable {
    private static final String LOG_TAG = "SignalStrength";
    private static final boolean DBG = false;
    /** @hide */
    public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0;
    /** @hide */
    public static final int SIGNAL_STRENGTH_POOR = 1;
    /** @hide */
    public static final int SIGNAL_STRENGTH_MODERATE = 2;
    /** @hide */
    public static final int SIGNAL_STRENGTH_GOOD = 3;
    /** @hide */
    public static final int SIGNAL_STRENGTH_GREAT = 4;
    /** @hide */
    public static final int NUM_SIGNAL_STRENGTH_BINS = 5;
    /** @hide */
    public static final String[] SIGNAL_STRENGTH_NAMES = {
        "none", "poor", "moderate", "good", "great"
    };
....

E applica la formuletta matematica che vedi ....

B4X:
  int asu = sStrength.getGsmSignalStrength();

            if (networktype.getValue().equals("GPRS")
                    || networktype.getValue().equals("EDGE")) {
                signalstrength.setUnit(SensorValue.UNIT.DBM);

                if (asu < 31) {
                    signalstrength.setValue(-113 + (asu * 2));
                } else if (asu == 31) {
                    signalstrength.setValue(">=51");
                } else if (asu == 99) {
                    signalstrength.setValue("not detectable");
                } else {
                    Log.d(SensorRegistry.TAG,
                            "unexpected GSM signal strength value");
                }
            } else if (networktype.getValue().equals("UMTS")
                    || networktype.getValue().equals("HSPA")
                    || networktype.getValue().equals("HSPA+")
                    || networktype.getValue().equals("HSUPA")
                    || networktype.getValue().equals("HSDPA")) {
                signalstrength.setUnit(SensorValue.UNIT.DBM);
                if (asu >= -5 && asu <= 91) {
                    signalstrength.setValue(asu - 116);
                }
            } else {
                signalstrength.setUnit(SensorValue.UNIT.ASU);
                signalstrength.setValue(asu);
            }
 

AlpVir

Well-Known Member
Licensed User
Longtime User
@MarcoRome
Grazie del tuo interessamento.
La lunga sequenza dei dati di SignalStrengh non varia mai, sia in presenza di un forte segnale che un segnale debole.
In pratica nella mia app (molto disordinata come avrai avuto modo di vedere) premendo il pulsante segnala si ha sempre :
Sub BotLog_click
PhoneStateListener has been initialized.
onServiceStateChanged IN SERVICE
onMessageWaitingIndicatorChanged false
onCallForwardingIndicatorChanged false
onCellLocationChanged [22823,230470662,-1]
onCallStateChanged: 0 &
onDataConnectionStateChanged Disconnected
onDataActivity NONE
onSignalStrengthChanged SignalStrength: 99 99 -120 -160 -120 -1 -1 99 -93 -3 2147483647 2147483647 gsm|lte
SignalStrength: 99 99 -120 -160 -120 -1 -1 99 -93 -3 2147483647 2147483647 gsm|lte
Segnale=99

EDIT: non saprei come applicare quanto da te riportato nel post precedente, posto (sic !) che serva
 
Last edited:
Top