How to connect android wifi to adhoc wifi? How to connect android wifi to adhoc wifi? android android

How to connect android wifi to adhoc wifi?


You are correct that this is currently not natively supported in Android, although Google has been saying it will be coming ever since Android was officially launched.

While not natively supported, the hardware on every android device released to date do support it. It is just disabled in software, and you would need to enable it in order to use these features.

It is however, fairly easy to do this, but you need to be root, and the specifics may be slightly different between different devices. Your best source for more informationa about this, would be XDA developers: http://forum.xda-developers.com/forumdisplay.php?f=564.Most of the existing solutions are based on replacing wpa_supplicant, and is the method I would recommend if possible on your device. For more details, see http://szym.net/2010/12/adhoc-wifi-in-android/.

Update: Its been a few years now, and whenever I need an ad hoc network connection on my phone I use CyanogenMod. It gives you both programmatic and scripted access to these functions, and the ability to create ad hoc (ibss) networks in the WiFi settings menu.


If you specifically want to use an ad hoc wireless network, then Andy's answer seems to be your only option. However, if you just want to share your laptop's internet connection via Wi-fi using any means necessary, then you have at least two more options:

  1. Use your laptop as a router to create a wifi hotspot using Virtual Router or Connectify. A nice set of instructions can be found here.
  2. Use the Wi-fi Direct protocol which creates a direct connection between any devices that support it, although with Android devices support is limited* and with Windows the feature seems likely to be Windows 8 only.

*Some phones with Android 2.3 have proprietary OS extensions that enable Wi-fi Direct (mostly newer Samsung phones), but Android 4 should fully support this (source).


I did notice something of interest here: In my 2.3.4 phone I can't see AP/AdHoc SSIDs in the Settings > Wireless & Networks menu. On an Acer A500 running 4.0.3 I do see them, prefixed by (*)

However in the following bit of code that I adapted from (can't remember source, sorry!) I do see the Ad Hoc show up in the Wifi Scan on my 2.3.4 phone. I am still looking to actually connect and create a socket + input/outputStream. But, here 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;@Overridepublic 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());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    getMenuInflater().inflate(R.menu.main, menu);    return true;}

Don't forget that in Eclipse you can use Ctrl+Shift+[letter O] to fill in the missing imports...

and my manifest:

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

Hope that helps!