【发布时间】:2011-02-24 05:55:59
【问题描述】:
我是安卓系统的新手。 这是正确的,android 2.2.1 WIFI 只检测非自组织无线网络? 我想知道是否有办法将我的 android 连接到笔记本电脑上的 ad hoc 网络设置。
【问题讨论】:
-
如果这与编程无关,它可能属于here
我是安卓系统的新手。 这是正确的,android 2.2.1 WIFI 只检测非自组织无线网络? 我想知道是否有办法将我的 android 连接到笔记本电脑上的 ad hoc 网络设置。
【问题讨论】:
您说得对,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) 网络。
【讨论】:
如果您特别想使用 ad hoc 无线网络,那么Andy's answer 似乎是您唯一的选择。但是,如果您只想使用任何必要的方式通过 Wi-fi 共享笔记本电脑的互联网连接,那么您至少还有两个选择:
*一些搭载 Android 2.3 的手机具有支持 Wi-fi Direct 的专有操作系统扩展(大多数是较新的三星手机),但 Android 4 应该完全支持这一点 (source)。
【讨论】:
如果您有 Microsoft 虚拟 WiFi 微型端口适配器作为可用网络适配器之一,您可以执行以下操作:
netsh wlan set hostednetwork mode=allow ssid=NAME key=PASSWORD
netsh wlan start hostednetwork
netsh wlan stop hostednetwork
就是这样!
来源:How to connect android phone to an ad-hoc network without softwares.
【讨论】:
我确实注意到了一些有趣的事情:在我的 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>
希望有帮助!
【讨论】:
您是对的,但请注意,您可以反过来做 - 使用 Android Wifi 网络共享,将手机设置为基站并从笔记本电脑连接到所述基站。
【讨论】: