web-dev-qa-db-fra.com

Comment obtenir la force du signal du service cellulaire sous Android?

J'essaye d'écrire une application très simple Android qui vérifie la force du signal de la cellule actuelle. Jusqu'à présent, je n'ai trouvé que quelque chose qui s'appelle getNeighboringCellInfo(), mais je suis Je ne sais pas vraiment si cela inclut la cellule actuelle.

Comment obtenir la force du signal cellulaire ACTUEL sous Android?

getNeighborCellInfo() obtient-il la cellule actuelle? Cela ne semble pas être basé sur les résultats que j'ai pu obtenir. Voici mon code actuel:

List<NeighboringCellInfo> n = tm.getNeighboringCellInfo();

//Construct the string
String s = "";
int rss = 0;
int cid = 0;
for (NeighboringCellInfo nci : n)
{
    cid = nci.getCid();
    rss = -113 + 2*nci.getRssi();
    s += "Cell ID: " + Integer.toString(cid) + "     Signal Power (dBm): " + 
            Integer.toString(rss) + "\n";
}

mainText.setText(s);
22
Doughy

créez un PhoneStateListener et gérez le rappel onSignalStrengthChanged. Lorsque votre application est initialisée, elle devrait vous donner une notification initiale. C'est en 1.x. dans 2.x, il y a un problème ouvert à ce sujet.

19
jspcal

Ce code peut aider:

PhoneStateListener phoneStateListener = new PhoneStateListener() {
public void onCallForwardingIndicatorChanged(boolean cfi) {}
public void onCallStateChanged(int state, String incomingNumber) {}
public void onCellLocationChanged(CellLocation location) {}
public void onDataActivity(int direction) {}
public void onDataConnectionStateChanged(int state) {}
public void onMessageWaitingIndicatorChanged(boolean mwi) {}
public void onServiceStateChanged(ServiceState serviceState) {}
public void onSignalStrengthChanged(int asu) {}
};

Une fois que vous avez créé votre propre écouteur d'état du téléphone, enregistrez-le auprès de Telephony Manager à l'aide d'un masque binaire pour indiquer les événements que vous souhaitez écouter, comme illustré dans l'extrait de code suivant:

TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);

telephonyManager.listen(phoneStateListener,
PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR |
PhoneStateListener.LISTEN_CALL_STATE |
PhoneStateListener.LISTEN_CELL_LOCATION |
PhoneStateListener.LISTEN_DATA_ACTIVITY |
PhoneStateListener.LISTEN_DATA_CONNECTION_STATE |
PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR |
PhoneStateListener.LISTEN_SERVICE_STATE |
PhoneStateListener.LISTEN_SIGNAL_STRENGTH);

Vous devez également les ajouter à AndroidManifest.xml:

<uses-permission Android:name="Android.permission.READ_PHONE_STATE"/>
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION"/>
13
tunc olcay