Как подключить WiFi Wi-Fi к adhoc Wi-Fi?

Привет,

Я новичок в системе Android. Правильно ли это, что Android 2.2.1 WIFI обнаруживает беспроводную сеть не-ad hoc? Мне было интересно, есть ли способ подключить мой Android к сети ad hoc через мой ноутбук.

Ваш ответ будет высоко оценен.

Спасибо, Кирилл Х.

Ответ 1

Вы правы, что в настоящее время это не поддерживается на самом деле в Android, хотя Google заявляет, что он будет появляться с момента официального запуска Android.

Пока поддержка не поддерживается, аппаратное обеспечение каждого устройства Android, выпущенного на сегодняшний день, поддерживает его. Он просто отключен в программном обеспечении, и вам нужно будет включить его, чтобы использовать эти функции.

Однако, это довольно легко сделать, но вам нужно быть root, и особенности могут быть немного разными между различными устройствами. Ваш лучший источник для получения дополнительной информации об этом, были бы разработчиками XDA: http://forum.xda-developers.com/forumdisplay.php?f=564. Большинство существующих решений основаны на замене wpa_supplicant, и это метод, который я бы рекомендовал, если возможно, на вашем устройстве. Для получения дополнительной информации см. http://szym.net/2010/12/adhoc-wifi-in-android/.

Обновление: его было несколько лет, и всякий раз, когда мне нужно подключение к сети ad hoc на моем телефоне, я использую CyanogenMod. Это дает вам как программный, так и скриптовый доступ к этим функциям, а также возможность создавать специальные сети (ibss) в меню настроек WiFi.

Ответ 2

Если вы специально хотите использовать беспроводную сеть ad hoc, то Andy answer кажется вашим единственным вариантом. Однако, если вы просто хотите поделиться своим интернет-соединением через Wi-Fi любым необходимым образом, у вас есть как минимум еще два варианта:

  • Используйте свой ноутбук в качестве маршрутизатора для создания точки доступа Wi-Fi, используя Virtual Router или Connectify. Хороший набор инструкций можно найти здесь.
  • Используйте протокол Wi-fi Direct, который создает прямое соединение между любыми устройствами, которые его поддерживают, хотя поддержка Android-устройств ограничена * и с Windows эта функция кажется скорее Windows 8.

* Некоторые телефоны с Android 2.3 имеют собственные расширения ОС, которые поддерживают Wi-Fi Direct (в основном новые телефоны Samsung), но Android 4 должен полностью поддерживать это (источник).

Ответ 3

Я заметил кое-что интересное: на моем телефоне 2.3.4 я не вижу SSID Ad/HHH в меню "Настройки" > "Беспроводные сети". На Acer A500 под управлением 4.0.3 я вижу их, с префиксом (*)

Однако в следующем фрагменте кода, который я адаптировал (не могу вспомнить источник, извините!), я вижу, что Ad Hoc отображается в Wifi Scan на моем телефоне 2.3.4. Я все еще ищу, чтобы на самом деле подключиться и создать сокет + input/outputStream. Но, здесь вы идете:

    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;
}

Не забывайте, что в Eclipse вы можете использовать Ctrl + Shift + [letter O], чтобы заполнить отсутствующие импорт...

и мой манифест:

    <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>

Надеюсь, что это поможет!

Ответ 4

Если у вас есть мини-адаптер Microsoft Virtual WiFi Miniport в качестве одного из доступных сетевых адаптеров, вы можете сделать следующее:

  • Запустите Windows Command Processor (cmd) в качестве администратора
  • Тип: netsh wlan set hostednetwork mode=allow ssid=NAME key=PASSWORD
  • Затем: netsh wlan start hostednetwork
  • Откройте "Панель управления\Сеть и Интернет\Сетевые подключения"
  • Щелкните правой кнопкой мыши активный сетевой адаптер (тот, который вы используете для подключения в Интернете), затем нажмите "Свойства"
  • Затем откройте вкладку "Общий доступ"
  • Установите флажок "Разрешить другим пользователям сети подключаться..." и выберите свой мини-адаптер WiFi.
  • После завершения введите: netsh wlan stop hostednetwork

Что это!

Источник: Как подключить Android-телефон к сети ad-hoc без программного обеспечения.

Ответ 5

Вы правы, но обратите внимание, что вы можете сделать это наоборот - используйте Android Wi-Fi-модем, который настраивает телефон в качестве базовой станции и подключается к упомянутой базовой станции с ноутбука.