Как подключить Android Wi-Fi к Adhoc Wi-Fi?
Я новичок в системе Android. Правильно ли это, Android 2.2.1 WIFI обнаруживает только беспроводную беспроводную сеть? Мне было интересно, есть ли способ подключить мой Android к специальной сети с моего ноутбука.
5 ответов
Вы правы, что в настоящее время это не поддерживается изначально в 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/.
Обновление: Прошло уже несколько лет, и всякий раз, когда мне нужно специальное сетевое соединение на моем телефоне, я использую CyanogenMod. Он предоставляет вам как программный, так и скриптовый доступ к этим функциям, а также возможность создавать специальные сети (ibss) в меню настроек WiFi.
Если вы конкретно хотите использовать беспроводную сеть ad hoc, то ответ Энди, кажется, ваш единственный вариант. Однако, если вы просто хотите поделиться интернет-соединением вашего ноутбука через Wi-Fi, используя любые необходимые средства, то у вас есть как минимум еще две опции:
- Используйте свой ноутбук в качестве маршрутизатора, чтобы создать точку доступа Wi-Fi, используя Virtual Router или Connectify. Хороший набор инструкций можно найти здесь.
- Используйте протокол Wi-Fi Direct, который создает прямое соединение между любыми устройствами, которые его поддерживают, хотя на устройствах Android поддержка ограничена *, а в Windows эта функция, вероятно, предназначена только для Windows 8.
* Некоторые телефоны с Android 2.3 имеют фирменные расширения ОС, которые поддерживают Wi-Fi Direct (в основном это новые телефоны Samsung), но Android 4 должен полностью поддерживать это ( источник).
Если в качестве одного из доступных сетевых адаптеров у вас есть адаптер виртуального мини-порта Microsoft WiFi, вы можете сделать следующее:
- Запустите командный процессор Windows (cmd) от имени администратора
- Тип:
netsh wlan set hostednetwork mode=allow ssid=NAME key=PASSWORD
- Затем:
netsh wlan start hostednetwork
- Откройте "Панель управления \ Сеть и Интернет \ Сетевые подключения"
- Щелкните правой кнопкой мыши на активном сетевом адаптере (тот, который вы используете для подключения к Интернету), а затем нажмите Свойства
- Затем откройте вкладку "Общий доступ"
- Установите флажок "Разрешить другим пользователям сети подключаться..." и выберите адаптер мини-порта WiFi.
- После завершения введите:
netsh wlan stop hostednetwork
Это оно!
Источник: Как подключить телефон Android к одноранговой сети без программного обеспечения.
Я заметил кое-что интересное: в моем телефоне 2.3.4 я не вижу AP/AdHoc SSID в меню "Настройки"> "Беспроводные сети". На 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+[буква 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>
Надеюсь, это поможет!
Вы правы, но учтите, что вы можете сделать это наоборот: используйте модем Android Wifi, который настраивает телефон в качестве базовой станции и подключается к указанной базовой станции с ноутбука.