67 votes

Comment connecter Android wifi à wifi adhoc?

Salutations,

Je suis nouveau sur le système Android. Est-ce correct, l'androïde 2.2.1 WIFI détecte uniquement les réseaux sans fil non-ad hoc? Je me demandais s'il y avait un moyen de connecter mon Android à une configuration de réseau ad hoc à partir de mon ordinateur portable.

Votre réponse sera grandement appréciée.

Merci Cyril H.

43voto

Andy Points 844

Il est exact que ce n'est actuellement pas pris en charge nativement dans Android, mais Google a dit qu'il sera à venir depuis que Android a été officiellement lancé.

Alors pas pris en charge nativement, le matériel sur chaque appareil android publiées à ce jour ne le soutenir. C'est juste désactivé dans le logiciel, et vous devez l'activer pour utiliser ces fonctionnalités.

Toutefois, il est assez facile à faire, mais vous devez être root, et les détails spécifiques peuvent être légèrement différents entre les différents dispositifs. Votre meilleure source pour plus d'informationa à ce sujet, serait XDA developers: http://forum.xda-developers.com/forumdisplay.php?f=564. La plupart des solutions existantes sont basées sur le remplacement de wpa_supplicant, et c'est la méthode que je recommande si possible sur votre appareil. Pour plus de détails, voir http://szym.net/2010/12/adhoc-wifi-in-android/.

19voto

Silveri Points 692

Si vous souhaitez utiliser un ad hoc réseau sans fil, puis Andy réponse semble être votre seule option. Cependant, si vous souhaitez partager votre ordinateur portable, la connexion internet via Wi-fi à l'aide de tous les moyens nécessaires, alors vous avez au moins plus de deux options:

  1. Utilisation de votre ordinateur portable comme un routeur pour créer un hotspot wifi à l'aide de Routeur Virtuel ou Connectify. Une belle série d'instructions peuvent être trouvées ici.
  2. Utiliser le Wi-fi Direct protocole qui crée une connexion directe entre tous les appareils qui prennent en charge, bien qu'avec les appareils Android prise en charge est limitée* et Windows la fonction semble susceptible d'être sous Windows 8 uniquement.

*Certains téléphones avec Android 2.3 OS propriétaire des extensions qui permettent d'activer le Wi-fi Direct (surtout les plus récents téléphones Samsung), mais Android 4 totalement en charge (source).

6voto

random variabel Points 63

J'ai remarqué quelque chose d'intéressant ici: Dans mon 2.3.4 téléphone je ne peux pas voir AP/ad Hoc Ssid dans les Paramètres > sans Fil Et Réseaux menu. Sur un Acer A500 course 4.0.3 je ne les voir, préfixé par (*)

Cependant, dans la suite de bits de code que j'ai adapté de (ne me souviens pas de la source, désolé!) Je ne vois Ad Hoc apparaître dans le Wifi Scan sur mon 2.3.4 téléphone. Je suis toujours à la recherche pour en fait se connecter et de créer un socket + entrée/outputStream. Mais, ici ya go:

    public class MainActivity extends Activity {

private static final String CHIPKIT_BSSID = "E2:14:9F:18:40:1C";
private static final int CHIPKIT_WIFI_PRIORITY = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Button btnDoSomething = (Button) findViewById(R.id.btnDoSomething);
    final Button btnNewScan = (Button) findViewById(R.id.btnNewScan);
    final TextView textWifiManager = (TextView) findViewById(R.id.WifiManager);
    final TextView textWifiInfo = (TextView) findViewById(R.id.WifiInfo);
    final TextView textIp = (TextView) findViewById(R.id.Ip);

    final WifiManager myWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    final WifiInfo myWifiInfo = myWifiManager.getConnectionInfo();

    WifiConfiguration wifiConfiguration = new WifiConfiguration();
    wifiConfiguration.BSSID = CHIPKIT_BSSID;
    wifiConfiguration.priority = CHIPKIT_WIFI_PRIORITY;
    wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    wifiConfiguration.allowedKeyManagement.set(KeyMgmt.NONE);
    wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    wifiConfiguration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
    wifiConfiguration.status = WifiConfiguration.Status.ENABLED;

    myWifiManager.setWifiEnabled(true);

    int netID = myWifiManager.addNetwork(wifiConfiguration);

    myWifiManager.enableNetwork(netID, true);

    textWifiInfo.setText("SSID: " + myWifiInfo.getSSID() + '\n' 
            + myWifiManager.getWifiState() + "\n\n");

    btnDoSomething.setOnClickListener(new View.OnClickListener() {          
        public void onClick(View v) {
            clearTextViews(textWifiManager, textIp);                
        }           
    });

    btnNewScan.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            getNewScan(myWifiManager, textWifiManager, textIp);
        }
    });     
}

private void clearTextViews(TextView...tv) {
    for(int i = 0; i<tv.length; i++){
        tv[i].setText("");
    }       
}

public void getNewScan(WifiManager wm, TextView...textViews) {
    wm.startScan();

    List<ScanResult> scanResult = wm.getScanResults();

    String scan = "";

    for (int i = 0; i < scanResult.size(); i++) {
        scan += (scanResult.get(i).toString() + "\n\n");
    }

    textViews[0].setText(scan);
    textViews[1].setText(wm.toString());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

N'oubliez pas que dans Eclipse, vous pouvez utiliser les touches Ctrl+Maj+[lettre O] pour combler les lacunes dans le les importations...

et mon manifeste:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.digilent.simpleclient"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Espérons que ça aide!

1voto

gby Points 8094

Vous avez raison, mais notez que vous pouvez le faire dans l'autre sens - utilisez le partage de connexion Android Wifi qui configure le téléphone en tant que station de base et connectez cette station de base à partir de l'ordinateur portable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X