【问题标题】:How to connect android wifi to adhoc wifi?如何将android wifi连接到adhoc wifi?
【发布时间】:2011-02-24 05:55:59
【问题描述】:

我是安卓系统的新手。 这是正确的,android 2.2.1 WIFI 只检测非自组织无线网络? 我想知道是否有办法将我的 android 连接到笔记本电脑上的 ad hoc 网络设置。

【问题讨论】:

  • 如果这与编程无关,它可能属于here

标签: android wifi adhoc


【解决方案1】:

您说得对,Android 目前不支持此功能,尽管自 Android 正式推出以来,Google 一直表示它将提供此功能。

虽然本机不支持,但迄今为止发布的每个 android 设备上的硬件都支持它。它只是在软件中被禁用,您需要启用它才能使用这些功能。

然而,这样做相当容易,但您需要是 root,并且不同设备之间的细节可能略有不同。 XDA 开发人员是您获取更多信息的最佳来源:http://forum.xda-developers.com/forumdisplay.php?f=564。 大多数现有解决方案都是基于替换 wpa_supplicant,如果可能的话,我会在您的设备上推荐这种方法。详情请见http://szym.net/2010/12/adhoc-wifi-in-android/

更新:现在已经有几年了,每当我需要在手机上进行自组织网络连接时,我都会使用CyanogenMod。它为您提供对这些功能的编程和脚本访问,并能够在 WiFi 设置菜单中创建 ad hoc (ibss) 网络。

【讨论】:

    【解决方案2】:

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

    1. 将笔记本电脑用作路由器,使用Virtual RouterConnectify 创建wifi 热点。可以在here 找到一组很好的说明。
    2. 使用Wi-fi Direct 协议在任何支持它的设备之间创建直接连接,尽管对于 Android 设备的支持是有限的*并且对于 Windows,该功能似乎仅限于 Windows 8。

    *一些搭载 Android 2.3 的手机具有支持 Wi-fi Direct 的专有操作系统扩展(大多数是较新的三星手机),但 Android 4 应该完全支持这一点 (source)。

    【讨论】:

    • VirtualRouter+1,非常有用的工具,也是开源的
    • VirtualRouter +1。几天来一直在努力解决这个问题,但效果很好。
    • VirtualRouter 是一个很好的解决方案。开源,非广告驱动,不跟踪流量。安装和解决我的问题不到 2 分钟。肯定会支持这个答案。
    【解决方案3】:

    如果您有 Microsoft 虚拟 WiFi 微型端口适配器作为可用网络适配器之一,您可以执行以下操作:

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

    就是这样!

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

    【讨论】:

      【解决方案4】:

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

      但是,在我改编的以下代码中(不记得来源,抱歉!)我确实看到 Ad Hoc 出现在我的 2.3.4 手机上的 Wifi Scan 中。我仍在寻找实际连接并创建一个套接字+输入/输出流。但是,你去吧:

          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>
      

      希望有帮助!

      【讨论】:

      • 您是否能够连接到 adhoc 网络?使用您的代码,我能够获取 adhoc 网络的 SSID。
      • 嗨,你能连接那个 adhoc 网络并通过它传输一些东西吗?
      • @Ratan 和 Sandip,我确实得到了有效的双向通信。虽然我不确定我使用了多少上面的代码。
      【解决方案5】:

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

      【讨论】:

      • 您只能在某些手机上执行此操作(即没有 root)
      • 我可以用这种方法共享PC上网吗?
      • @Imon 不。它的目的是共享手机与 PC 的 3G 连接。
      • 我认为无论wifi链接的建立方式如何,您都可以共享PC的IP上行链路。您只需在PC上设置路由,包括NAPT,并将PC的IP地址设置为手机上的默认网关。
      猜你喜欢
      • 2023-04-02
      • 2020-01-25
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      相关资源
      最近更新 更多