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

Téléchargez Android Discussion :

[API 10+] Wifi en mode access point.


Sujet :

Téléchargez Android

  1. #1
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut [API 10+] Wifi en mode access point.
    Bonjour à tous. Depuis Gingerbread [citation nécessaire] (android 2.3.3) notre OS mobile préféré sait créer et gérer un point d'accès wifi (en anglais, Wifi Access Point aka AP). Il est possible d'activer cette fonctionnalité dans Paramètres > Sans fil et réseaux > Point d'accès et mobile > Point d'accès mobile.

    Néanmoins, pour une raison qui m'est inconnue, il n'est pas possible − selon la documentation d'android − d'activer cette option par programmation. En effet, les méthodes du WifiManager qui gèrent l'activation et la configuration de l'AP sont cachées (annotation @hide spécifique à android).

    Voici une première ébauche de classe contournant ce problème.
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    package com.developpez.android
     
    import java.lang.reflect.Method;
    import android.net.wifi.WifiConfiguration;
    import android.net.wifi.WifiManager;
     
    /**
     * This class provides Wifi Access Point basic functions.
     * 
     * This class needs the following permissions:<ul>
     * <li>CHANGE_WIFI_STATE;</li>
     * <li>ACCESS_WIFI_STATE.</li>
     * </ul>
     * @author Yankel Scialom
     * @todo Use {@code WifiLock} to prevent the WiFi radio to turn
     * off when the user has not used the device in a while.
     */
    public class WifiApManager {
    	private WifiManager wifiMan;
    	protected Method setWifiApEnabledMethod, isWifiApEnabledMethod;
    	protected final static int MAX_ITER = 10;
     
    	/**
             * Creates a new WifiApManager from an instanced WifiManager.
             * @param wifiMan a WifiManager obtain by {@code (WifiManager) this.getSystemService(Context.WIFI_SERVICE)}.
             */
    	public WifiApManager(WifiManager wifiMan) {
    		this.wifiMan = wifiMan;
    		getHiddenMethods();
    	}
     
    	/**
             * Since {@code WifiManager.setWifiApEnabled()} and
             * {@code WifiManager.setWifiApEnabledMethod()} are hidden
             * ({@literal @}hide), we need to bypass this restriction. This method
             * sets the {@code setWifiApEnabledMethod} and {@code isWifiApEnabledMethod}
             * private members to be called with {@link setWifiApEnabled()} and
             * {@link isWifiApEnabled()}.
             */
    	private void getHiddenMethods() {
    		try {
    			setWifiApEnabledMethod = wifiMan.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
    			isWifiApEnabledMethod = wifiMan.getClass().getMethod("isWifiApEnabled");
    		} catch (NoSuchMethodException e) {
    			e.printStackTrace();
    		}
    	}
     
    	/**
             * Return whether WiFi Access Point is enabled or disabled.
             * @return {@code true} if WiFi Access Point is enabled
             * @see WifiManager#isWifiApEnabled()
             */
    	public boolean isWifiApEnabled() {
    		try {
    			return (Boolean)isWifiApEnabledMethod.invoke(wifiMan);
    		} catch (Exception e) {
    			return false;
    		}
    	}
     
    	/**
             * Return whether WiFi is enabled or disabled.
             * @return {@code true} if WiFi is enabled
             * @see WifiManager#isWifiEnabled()
             */
    	public boolean isWifiEnabled() {
    		return wifiMan.isWifiEnabled();
    	}
     
    	/**
             * Start AccessPoint mode with the specified
             * configuration. If the radio is already running in
             * AP mode, update the new configuration.
             * Note that starting in Access Point mode disables station
             * mode operation
             * @param conf SSID, security and channel details as
             *              part of WifiConfiguration;
             * @param enabled ignored.
             * @return {@code true} if the operation succeeds, {@code false} otherwise.
             */
    	public boolean setWifiApEnabled(WifiConfiguration conf, boolean enabled) {
    		try {
    			return (Boolean) setWifiApEnabledMethod.invoke(wifiMan, conf, true);
    		} catch (Exception e) {
    			return false;
    		}
    	}
     
    	/** Toggles the Wifi Access Point radio.<ul>
             * <li>If Access Point mode Wifi is enabled, this method disables it and returns;</li>
             * <li>if Station mode Wifi is enabled, this method enables the Access Point mode.</li>
             * </ul>
             * @param ssid The SSID of the Access Point.
             * @returns {@code true} if the operation succeeds, {@code false} otherwise.
             */
    	public boolean toggleWifi(String ssid) {
    		// WifiConfiguration creation:
    		WifiConfiguration conf = new WifiConfiguration();
    		conf.SSID = ssid;
    		conf.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
     
    		// If AP Wifi is enabled, disables it and returns:
    		if(isWifiApEnabled()) {
    			//setWifiApEnabled(null, false); Won't work, see two further lines
    			wifiMan.setWifiEnabled(true);
    			wifiMan.setWifiEnabled(false);
    			int maxIter = MAX_ITER;
    			while (isWifiApEnabled() && maxIter-- >= 0) {
    				try {Thread.sleep(500);} catch (Exception e) {}
    			}
    			return isWifiApEnabled();
    		}
     
    		// If standard Wifi is enabled, disables it:
    		if (isWifiEnabled()) {
    			if (wifiMan.setWifiEnabled(false)) {
    				int maxIter = MAX_ITER;
    				while (wifiMan.isWifiEnabled() && maxIter-- >= 0) {
    					try {Thread.sleep(500);} catch (Exception e) {}
    				}
    			}
    			if (isWifiEnabled()) {
    				return false;
    			}
    		}
     
    		// Enables AP Wifi
    		try {
    			if (! setWifiApEnabled(conf, true)) {
    				System.out.println("setWifiApEnabledMethod failed.");
    				return false;
    			}
    			int maxIter = MAX_ITER;
    			while (! isWifiApEnabled() && maxIter-- > 0) {
    				try {Thread.sleep(500);} catch (Exception e) {}
    			}
    		} catch(Exception e) {
    			e.printStackTrace();
    			return false;
    		}
    		return true;
    	}
    }
    Cette classe s'instancie à partir du WifiManager obtenu par (WifiManager) this.getSystemService(Context.WIFI_SERVICE)this désigne l'activité (Activity) ou assimilé. À la création d'une instance de WifiApManager, les méthodes publiques (mais cachées) setWifiApEnabled et isWifiApEnabled de la classe WifiManager sont recherchées (grâce à getClass() et getMethod()).

    * * *

    Voici un exemple d'utilisation. L'activité suivante composée d'un ToggleButton active / désactive le Wifi en mode AP. Notez que la méthode proposée WifiApManager.toggleWifi(String ssid) n'est qu'un exemple d'utilisation des méthodes liées à la configuration de point d'accès ; il est tout à fait possible de créer un réseau plus complexe (voir WifiConfiguration et DhcpInfo). Notez aussi que ladite méthode est bloquante ; il est donc de bon usage de l'appeler dans un Thread différent, ou si l'on veut modifier l'interface graphique selon le résultat, dans une AsyncTask.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    package com.developpez.android
     
    import android.net.wifi.WifiManager;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.LinearLayout;
    import android.widget.ToggleButton;
     
    public class MainActivity extends Activity implements OnClickListener {
     
    	private WifiApManager wifiMan;
    	private ToggleButton wifiButton;
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		wifiMan = new WifiApManager((WifiManager) this.getSystemService(Context.WIFI_SERVICE));
    		setContentView(R.layout.activity_main);
    		makeUI();
    	}
     
    	private void makeUI() {
    		LinearLayout subLayout = (LinearLayout) findViewById(R.id.subLayout);
    		wifiButton = new ToggleButton(this);
    		wifiButton.setTextOn("Disable Wifi");
    		wifiButton.setTextOff("Enable AP Wifi");
    		wifiButton.setChecked(wifiMan.isWifiApEnabled());
    		wifiButton.setOnClickListener(this);
    		subLayout.addView(wifiButton);
    	}
     
     
     
    	@Override
    	public void onClick(View sender) {
    		if (!wifiButton.equals(sender))
    			return;
     
    		AsyncTask<Object, Void, Boolean> task = new AsyncTask<Object, Void, Boolean>() {
    			private ToggleButton bt;
    			private WifiApManager wm;
     
    			@Override
    			protected Boolean doInBackground(Object... args) {
    				bt = (ToggleButton) args[0];
    				wm = (WifiApManager) args[1];
    				return wm.toggleWifi("Developpez.com");
    			}
    			@Override
    			protected void onPostExecute (Boolean result) {
    				bt.setChecked(result.booleanValue());
    				bt.setEnabled(true);
    			}
    		};
    		wifiButton.setEnabled(false);
    		task.execute(wifiButton, wifiMan);
    	}
    }
    J'encourage les lecteurs de ce fil à tester et modifier le code ci dessus, ainsi qu'à partager leur avis à propos de cette implémentation et de son utilité.
    -- Yankel Scialom

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Tout d'abord, merci pour avoir pris la peine d'avoir exposé ton code de manière claire et soigné pour l'activation du hotspot par programmation sur android.

    J'aimerai savoir si il était possible, toujours par programmation, de modifier le nombre de clients pouvant se connecter au hotspot (par défault ça varie de 5 à 10 suivant les smartphones) et de leur couper la connexion internet. Cela fait quelques jours que je cherche et je commence à me dire que ça n'est pas faisable à condition de modifier probablement le fichier de configuration hostapd.conf et d'avoir rooter le device (solution qui ne me plaît guère si elle est réalisable).

    Aurai-tu une réponse ou des idées à ce sujet?
    Merci.
    Emine

  3. #3
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour Emine.

    Non je n'ai pas la moindre idée d'une éventuelle possibilité de gérer les clients du point d'accès. J'ai farfouillé dans le code du WifiManager, et je ne me souviens pas avoir vu quelque chose qui s'y approche, même de loin. Qui plus est, hostapd.conf est un binaire (si ) dans ma version d'android (2.3.3).

    Une piste de solution : oublier java et passer à Qt, comme je l'ai fait. Je ne dis pas que c'est possible, mais ça ouvre déjà plus de possibilités.

    Bon courage.
    -- Yankel Scialom

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour Yankel,

    Merci pour ta réponse rapide.
    Je vais voir ce que peut apporter Qt.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Bonjour prgasp77,

    J'essaie modestement de mettre sur pied une application qui utilise la fonctionnalité hotspot.

    Je suis plutôt familiarisé avec linux et j'arrive à peu près à mon but en scriptant en bash et en utilisant hostapd.

    Je voudrais maintenant passé (et c'est une montagne) au java...

    En faisant quelques recherches je suis tombé sur votre post.

    Je sais que pour l'heure je suis très en dessous du niveau requis...mais j'aimerai progresser en m'attelant à une finalité..un exercice en quelque sorte pour découvrir les méandres du java sous android.

    J'ai rentré votre code (vos codes) dans eclipse, mais je manque de billes pour arriver à exporter le tout en .apk, qui si j'ai bien compris permettent d'activer et de désactiver le hotspot avec deux boutons.

    Mes questions:

    Comment organiser vos 2 .java dans le projet ?

    Comment "invoquer" la configuration c'est à dire essid,canal,encryptage..wificonfiguration..?

    Il en sera de meme pour la dhcp..avec dhcpinfo

    En bref si vous pouviez me donner une idéé sur l'organisation de la chose..

    Par avance merci de vos indications.

  6. #6
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour aristide13, et bienvenu sur les forums développez.com. Je me permets de te tutoyer car telle est l'habitude ici, je t'invite à en faire de même ou de préciser si cette coutume te dérange.

    Je crois comprendre que tu n'as jamais développé d'application Android en java ; avant de tenter de contrôler des éléments systèmes comme le wifi, peut-être devrais-tu commencer par des choses plus simples, comme des interfaces graphiques qui affichent « Hello, World! ». Il existe sur le site android.developpez.com de très bons tutoriels qui t'expliqueront mieux que moi les bases (et plus si affinité) du développement Android. (L'installation du SDK et de l'IDE devraient y être décrits, sinon le site de dev d'Android l'explique très bien (en)). Une fois les outils un peu mieux maîtrisés, mon extrait de code devrait te sembler plus clair, et tu devrais comprendre quoi en faire.


    Concernant l'encryptage du réseau Wifi, il s'agit de jouer avec WifiConfiguration (en).
    Quant à DHCP, sur ma version d'android (Gingerbread 2.3.7), il n'est pas possible de le configurer ; la classe DhcpInfo (en) ne permettant que de récupérer (et encore ...) les informations client DHCP.


    Mais en gros, pour utiliser les fonctions définies dans A.java, il faut inclure import A; dans le préambule du B.java (en supposant qu'ils soient dans le même package).

    Bon courage .
    -- Yankel Scialom

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Merci prgasp77,

    d'avoir pris le temps de répondre.

    Je sais que je ne peux faire l'impasse sur la laborieuse découverte de ce nouveau langage.

    Je suis en train de faire mes exercices et la jonction entre une MainActivity et une SecondeActivity commence à s'éclaircir!

    Peut-être que je me permettrais de revenir TE demander quelques précisions sur ton code si ça ne t'ennuie pas.

    Bonne soirée et encore merci .

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    artisan
    Inscrit en
    Octobre 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : artisan
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2013
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Bonsoir prgasp77,

    n'ayant pas réussi à mettre en oeuvre ton code ...j'ai un soucis de compréhension avec le sublayout dans le main activity.
    J'y reviendrais plus tard.

    j'ai trouvé une variante de ton code pour une class WifiApManager:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    package com.technisoft.ap;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.lang.reflect.Method;
    import java.net.InetAddress;
    import java.util.ArrayList;
     
    import com.technisoft.fastsharing.R;
     
    import android.content.Context;
    import android.net.wifi.WifiConfiguration;
    import android.net.wifi.WifiManager;
    import android.net.wifi.WifiConfiguration.KeyMgmt;
    import android.util.Log;
     
    public class WifiApManager {
    	private final WifiManager mWifiManager;
     
    	public WifiApManager(Context context) {
    		mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    	}
     
    	/**
         * Start AccessPoint mode with the specified
         * configuration. If the radio is already running in
         * AP mode, update the new configuration
         * Note that starting in access point mode disables station
         * mode operation
         * @param wifiConfig SSID, security and channel details as part of WifiConfiguration
         * @return {@code true} if the operation succeeds, {@code false} otherwise
         */
    	public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
    		try {
    			if (enabled) { // disable WiFi in any case
    				mWifiManager.setWifiEnabled(false);
    			}
     
    			Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
     
    			return (Boolean) method.invoke(mWifiManager, wifiConfig, enabled);
    		} catch (Exception e) {
    			Log.e(this.getClass().toString(), "", e);
    			return false;
    		}
    	}
     
    	/**
         * Gets the Wi-Fi enabled state.
         * @return {@link WIFI_AP_STATE}
         * @see #isWifiApEnabled()
         */
    	public WIFI_AP_STATE getWifiApState() {
    		try {
    			Method method = mWifiManager.getClass().getMethod("getWifiApState");
     
    			int tmp = ((Integer)method.invoke(mWifiManager));
     
    			// Fix for Android 4
    			if (tmp > 10) {
    				tmp = tmp - 10;
    			}
     
    			return WIFI_AP_STATE.class.getEnumConstants()[tmp];
    		} catch (Exception e) {
    			Log.e(this.getClass().toString(), "", e);
    			return WIFI_AP_STATE.WIFI_AP_STATE_FAILED;
    		}
    	}
     
    	/**
         * Return whether Wi-Fi AP is enabled or disabled.
         * @return {@code true} if Wi-Fi AP is enabled
         * @see #getWifiApState()
         *
         * @hide Dont open yet
         */
        public boolean isWifiApEnabled() {
            return getWifiApState() == WIFI_AP_STATE.WIFI_AP_STATE_ENABLED;
        }
     
        /**
         * Gets the Wi-Fi AP Configuration.
         * @return AP details in {@link WifiConfiguration}
         */
        public WifiConfiguration getWifiApConfiguration() {
    		try {
    			Method method = mWifiManager.getClass().getMethod("getWifiApConfiguration");
    			return (WifiConfiguration) method.invoke(mWifiManager);
    		} catch (Exception e) {
    			Log.e(this.getClass().toString(), "", e);
    			return null;
    		}
        }
     
        /**
         * Sets the Wi-Fi AP Configuration.
         * @return {@code true} if the operation succeeded, {@code false} otherwise
         */
        public boolean setWifiApConfiguration(WifiConfiguration wifiConfig) {
        	String networkSSID = "test";
        	try {
    			Method method = mWifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class);
    			WifiConfiguration config= new WifiConfiguration();
     
    			return (Boolean) method.invoke(mWifiManager, wifiConfig);
    		} catch (Exception e) {
    			Log.e(this.getClass().toString(), "", e);
    			return false;
    		}
    	}
     
    	/**
         * Gets a list of the clients connected to the Hotspot, reachable timeout is 300
         * @param onlyReachables {@code false} if the list should contain unreachable (probably disconnected) clients, {@code true} otherwise
         * @return ArrayList of {@link ClientScanResult}
         */
        public ArrayList<ClientScanResult> getClientList(boolean onlyReachables) {
        	return getClientList(onlyReachables, 300);
        }
     
    	/**
         * Gets a list of the clients connected to the Hotspot 
         * @param onlyReachables {@code false} if the list should contain unreachable (probably disconnected) clients, {@code true} otherwise
         * @param reachableTimeout Reachable Timout in miliseconds
         * @return ArrayList of {@link ClientScanResult}
         */
    	public ArrayList<ClientScanResult> getClientList(boolean onlyReachables, int reachableTimeout) {
    		BufferedReader br = null;
    		ArrayList<ClientScanResult> result = null;
     
    		try {
    			result = new ArrayList<ClientScanResult>();
    			br = new BufferedReader(new FileReader("/proc/net/arp"));
    			String line;
    			while ((line = br.readLine()) != null) {
    				String[] splitted = line.split(" +");
     
    				if ((splitted != null) && (splitted.length >= 4)) {
    					// Basic sanity check
    					String mac = splitted[3];
     
    					if (mac.matches("..:..:..:..:..:..")) {
    						boolean isReachable = InetAddress.getByName(splitted[0]).isReachable(reachableTimeout);
     
    						if (!onlyReachables || isReachable) {
    							result.add(new ClientScanResult(splitted[0], splitted[3], splitted[5], isReachable));
    						}
    					}
    				}
    			}
    		} catch (Exception e) {
    			Log.e(this.getClass().toString(), e.getMessage());
    		} finally {
    			try {
    				br.close();
    			} catch (IOException e) {
    				Log.e(this.getClass().toString(), e.getMessage());
    			}
    		}
     
    		return result;
    	}
    }
    dans une MainActivity je lance l'AP de la façon suivante en espérant pouvoir changer l'essid et en restant en OPEN:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void onCreate(Bundle savedInstanceState){
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		String SSID = "toto";
    		WifiConfiguration conf = new WifiConfiguration();
    		conf.SSID = "\"" + SSID + "\"";
    		conf.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
    		wifiApManager = new WifiApManager(this);
            wifiApManager.setWifiApEnabled(null, true);
    L'AP se lance mais l'essid reste figé sur celui donné par la dernière conf du système!

    En gros...comment écrire dans hostapd.conf avec l'API!
    Pourrais tu me donner une piste?

    Merci

Discussions similaires

  1. Dongle Wifi - Access point sous Linux
    Par yoshï dans le forum Périphériques
    Réponses: 1
    Dernier message: 01/02/2015, 20h09
  2. Mode Debug : point d'arrêt dynamique
    Par lionrouge dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 30/01/2009, 15h21
  3. Routeur WIFI en mode recepteur ?
    Par Ti-Pou dans le forum Hardware
    Réponses: 7
    Dernier message: 11/04/2006, 12h54
  4. Access Point sous linux
    Par AnKhCHFR dans le forum Réseau
    Réponses: 1
    Dernier message: 01/01/2006, 14h21
  5. API pour ouvrir une BD Access
    Par GofAcid dans le forum Access
    Réponses: 2
    Dernier message: 15/12/2004, 19h25

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