如何将android wifi连接到adhoc wifi?

时间:2011-02-24 05:56:00

标签: android wifi adhoc

我是Android系统的新手。 这是正确的,Android 2.2.1 WIFI只检测非ad hoc无线网络? 我想知道是否有办法将我的机器人连接到我的笔记本电脑的ad hoc网络设置。

5 个答案:

答案 0 :(得分:37)

你说这是正确的,Android目前并不支持这一点,尽管谷歌一直表示自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。它为您提供对这些功能的编程和脚本访问,以及在WiFi设置菜单中创建 ad hoc (ibss)网络的功能。

答案 1 :(得分:15)

如果您特别想使用 ad hoc 无线网络,那么Andy's answer似乎是您唯一的选择。但是,如果您只是想通过Wi-Fi使用任何必要的方式共享笔记本电脑的互联网连接,那么您至少还有两个选择:

  1. 使用笔记本电脑作为路由器,使用Virtual RouterConnectify创建wifi热点。可以找到一组很好的说明here
  2. 使用Wi-fi Direct协议在支持它的任何设备之间创建直接连接,但Android设备支持有限*并且在Windows中,该功能似乎只能是Windows 8。
  3. *部分使用Android 2.3的手机具有支持Wi-Fi Direct的专有操作系统扩展(主要是较新的三星手机),但Android 4应完全支持此功能(source)。

答案 2 :(得分:5)

我确实注意到了一些有趣的内容:在我的2.3.4手机中,我无法在设置中看到AP / AdHoc SSID>无线&网络菜单。在运行4.0.3的Acer A500上,我确实看到它们,前缀为(*)

然而,在我改编的以下代码中(不记得来源,抱歉!)我确实看到Ad Hoc出现在我的2.3.4手机上的Wifi Scan中。我仍然希望实际连接并创建一个socket + 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>

希望有所帮助!

答案 3 :(得分:5)

如果您将Microsoft Virtual WiFi Miniport Adapter作为可用网络适配器之一,则可以执行以下操作:

  • 以管理员身份运行Windows命令处理器(cmd)
  • 输入:netsh wlan set hostednetwork mode=allow ssid=NAME key=PASSWORD
  • 然后:netsh wlan start hostednetwork
  • 打开&#34;控制面板\网络和Internet \网络连接&#34;
  • 右键单击您的活动网络适配器(用于在Internet上连接的网络适配器),然后单击“属性”
  • 然后打开“共享”标签
  • 检查&#34;允许其他网络用户连接...&#34;并选择您的WiFi微型端口适配器
  • 完成后,输入:netsh wlan stop hostednetwork

那就是它!

来源:How to connect android phone to an ad-hoc network without softwares.

答案 4 :(得分:1)

你是对的,但请注意你可以反过来做 - 使用Android Wifi网络共享,将手机设置为基站并从笔记本电脑连接到所述基站。