IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

registerReceiver force de signal du WIFI


Sujet :

Android

  1. #1
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut registerReceiver force de signal du WIFI
    Bonjour,

    J'aimerai savoir si pour récupérer l'événement de la force du signal du wifi c'est bien avec ConnectivityManager.CONNECTIVITY_ACTION!

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		filter = new IntentFilter();
    		filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    		registerReceiver(layoutStatusBar.getNetworkPowerReceiver(), filter);
    Sinon que dois je mettre?


    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Connectivity_ACTION sert uniquement à savoir si la connexion a eu lieu.

    Ceci permet de savoir si la force du signal du wifi à changer:
    WifiManager.RSSI_CHANGED_ACTION

    ceci permet de savoir si c'est activé, désactivé.... :

    WifiManager.WIFI_STATE_CHANGED_ACTION

  3. #3
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Merci beaucoup pour ta réponse

    Sais tu comment savoir de la même manière la force du signal pour savoir si on capte ou non (les 4 barres dans la barre de status)?

    Un StrengthsChanged ou un truc du genre

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Ceci t'aidera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    WifiManager wm = (WifiManager) context
    				.getSystemService(Context.WIFI_SERVICE);
     
     
    		WifiInfo connectedInfo = wm.getConnectionInfo();
     
    		if (connectedInfo != null) {
    			int rssiWifi = connectedInfo.getRssi();
     
    			int signalLevelWifi = WifiManager.calculateSignalLevel(rssiWifi,
    					NUM_LEVEL_WIFI);
     
    }

  5. #5
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Merci

    Dans mon dernier poste je parlais plutot de la connectivité et non du wifi

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    542
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 542
    Par défaut
    Il faut que tu crée une classe qui hérite de PhoneStateListener puis tu implémente cette méthode qui vérifie les évenements qui ont lieu sur le signal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Override
    	public void onSignalStrengthsChanged(SignalStrength signalStrength) {
    		super.onSignalStrengthsChanged(signalStrength);
     
    		int signalRssiStrengh = 0;
    		if (signalStrength.isGsm()) {
    			signalRssiStrengh = signalStrength.getGsmSignalStrength();
    		} 
    }

  7. #7
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Merci beaucoup

  8. #8
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    C'est encore moi!
    Apres tests sur un android, ceci ne fonctionne pas, mon programme plante mais je ne sais pas pourquoi!

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     int NUM_LEVEL_WIFI = 5;
    WifiManager wm = (WifiManager) context
    		.getSystemService(Context.WIFI_SERVICE);
    		WifiInfo connectedInfo = wm.getConnectionInfo();
    		if (connectedInfo != null) {
    			int rssiWifi = connectedInfo.getRssi();
    			int signalLevelWifi = WifiManager.calculateSignalLevel(rssiWifi, NUM_LEVEL_WIFI);
    			switch (signalLevelWifi)
    			{
    				case 0:	//barre à 0
    						break;
    				case 1:	//barre à 1
    						break;
    				case 2:	//barre à 2
    						break;
    				case 3:	//barre à 3
    						break;
    				case 4:	//barre à 4
    						break;
    				default:// barre croix
    						break;
    			}
    		}
    		else
    		{
    			//aucune barre
    		}

    Qu'est ce qu'il ne va pas?

  9. #9
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Merci de donner un peu plus d'élément lorsque vous avez une erreur .

    Par exemple votre logcat ainsi que l'"endroit ou votre erreur apparaît .

    Merci .

  10. #10
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Bonjour,

    Merci de donner un peu plus d'élément lorsque vous avez une erreur .

    Par exemple votre logcat ainsi que l'"endroit ou votre erreur apparaît .

    Merci .
    Le soucis c'est que je ne peux pas tester avec l'émulateur car je n'ai pas trouvé comment activer le wifi dessus!
    Donc je l'ai testé directement sur un androïde! Je n'ai donc pas de log cat et je ne sais malheureusement pas d'où ça peut venir! C'est pour cela que je me tourne vers vous!

  11. #11
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Oups je suis bête je viens de me rendre compte qu'il suffit juste de l'activer dans l’émulateur

    Donc l'erreur LogCat est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    06-24 09:34:40.160: ERROR/AndroidRuntime(371): FATAL EXCEPTION: main
    06-24 09:34:40.160: ERROR/AndroidRuntime(371): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.WIFI_STATE_CHANGED flg=0x10000000 (has extras) } in com.webtiss.kiosque.ihm.receiver.WifiReceiver@43e60370
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.os.Handler.handleCallback(Handler.java:587)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.os.Handler.dispatchMessage(Handler.java:92)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.os.Looper.loop(Looper.java:123)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at java.lang.reflect.Method.invoke(Method.java:521)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at dalvik.system.NativeStart.main(Native Method)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371): Caused by: java.lang.SecurityException: WifiService: Neither user 10039 nor current process has android.permission.ACCESS_WIFI_STATE.
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.os.Parcel.readException(Parcel.java:1247)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.os.Parcel.readException(Parcel.java:1235)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.net.wifi.IWifiManager$Stub$Proxy.getConnectionInfo(IWifiManager.java:558)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.net.wifi.WifiManager.getConnectionInfo(WifiManager.java:592)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at com.webtiss.kiosque.ihm.receiver.WifiReceiver.onReceive(WifiReceiver.java:27)
    06-24 09:34:40.160: ERROR/AndroidRuntime(371):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
    Et donc il me manquait cette ligne dans le manifest:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE "/>

  12. #12
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    C'est encore moi!

    J'ai un problème!

    Le wifi est bien détecté et son signal aussi!

    Le problème est qu'il est toujours affiché meme quand il est desactivé!
    Qu'est ce qu'il n eva pas dans mon code?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     int NUM_LEVEL_WIFI = 5;
    WifiManager wm = (WifiManager) context
    		.getSystemService(Context.WIFI_SERVICE);
    		WifiInfo connectedInfo = wm.getConnectionInfo();
    		if (connectedInfo != null) {
    			int rssiWifi = connectedInfo.getRssi();
    			int signalLevelWifi = WifiManager.calculateSignalLevel(rssiWifi, NUM_LEVEL_WIFI);
    			switch (signalLevelWifi)
    			{
    				case 0:	//barre à 0
    						break;
    				case 1:	//barre à 1
    						break;
    				case 2:	//barre à 2
    						break;
    				case 3:	//barre à 3
    						break;
    				case 4:	//barre à 4
    						break;
    				default:// barre croix
    						break;
    			}
    		}
    		else
    		{
    			//Masquage du wifi
    		}

  13. #13
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Apparemment lorsque calculateSignalLevel vaut 0 alors il faut masquer le wifi ce qui veut dire que le wifi est désactiver!

    Mais alors que signifie les autres valeurs???

  14. #14
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    public static int calculateSignalLevel (int rssi, int numLevels)

    Since: API Level 1
    Calculates the level of the signal. This should be used any time a signal is being shown.
    Parameters

    rssi The power of the signal measured in RSSI.
    numLevels The number of levels to consider in the calculated level.
    Returns

    A level of the signal, given in the range of 0 to numLevels-1 (both inclusive).
    D'après la doc les autres valeurs correspondent à la puissance du signal sur une échelle de 0 à numLevels-1. Après méfie toi les deux valeurs sont inclues

    Maintenant ne peux tu pas utiliser plutôt cette méthode un BroadCast avec
    comme Intent-filter WifiManager.WIFI_STATE_CHANGED_ACTION ?

  15. #15
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Oui c'est exactement ce que je fais et dans ma methode onReceive j'utilise calculateSignalLevel pour savoir quelle image afficher!

    Cependant, ceci ne fonctionne pas et je ne sais pas comment faire!
    Sachant que mon NUM_LEVEL_WIFI = 5;
    Dans mon onReceive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    int NUM_LEVEL_WIFI = 5;
    WifiManager wm = (WifiManager) context
    		.getSystemService(Context.WIFI_SERVICE);
    		WifiInfo connectedInfo = wm.getConnectionInfo();
    		if (connectedInfo != null) {
    			int rssiWifi = connectedInfo.getRssi();
    			int signalLevelWifi = WifiManager.calculateSignalLevel(rssiWifi, NUM_LEVEL_WIFI);
    			switch (signalLevelWifi)
    			{
    				case 0:	//barre à 0
    						break;
    				case 1:	//barre à 1
    						break;
    				case 2:	//barre à 2
    						break;
    				case 3:	//barre à 3
    						break;
    				case 4:	//barre à 4
    						break;
    				default:// barre croix
    						break;
    			}
    		}
    		else
    		{
    			//Masquage du wifi
    		}
    En faites, ou dois je placer ce qui est en commentaire exactement?

    EDIT: J'ai trouvé le code de la fonction calculateSignalLevel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
        /** Anything worse than or equal to this will show 0 bars. */
        private static final int MIN_RSSI = -100;
     
        /** Anything better than or equal to this will show the max bars. */
        private static final int MAX_RSSI = -55;
     
       /**
         * Calculates the level of the signal. This should be used any time a signal
         * is being shown.
         *
         * @param rssi The power of the signal measured in RSSI.
         * @param numLevels The number of levels to consider in the calculated
         *            level.
         * @return A level of the signal, given in the range of 0 to numLevels-1
         *         (both inclusive).
         */
        public static int calculateSignalLevel(int rssi, int numLevels) {
            if (rssi <= MIN_RSSI) {
                return 0;
            } else if (rssi >= MAX_RSSI) {
                return numLevels - 1;
            } else {
                int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
                return (rssi - MIN_RSSI) / partitionSize;
            }
        }
    Mais ca ne m'avance pas vraiment :s

Discussions similaires

  1. mesure de force de signal
    Par androidyassin dans le forum Android
    Réponses: 1
    Dernier message: 13/04/2011, 15h17
  2. [WIFI] Amplification de signal avec D-LINK
    Par freud dans le forum Hardware
    Réponses: 5
    Dernier message: 03/05/2007, 15h31
  3. Récupérer la puissance du signal wifi
    Par mohamed.chedly dans le forum Linux
    Réponses: 10
    Dernier message: 24/04/2006, 16h40
  4. Puissance SIgnal WIFI
    Par el3gans dans le forum C
    Réponses: 4
    Dernier message: 09/11/2005, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo