web-dev-qa-db-ja.com

Android wifiをadhoc wifiに接続する方法は?

私はAndroidシステムを初めて使用します。これは正しいですか、Android 2.2.1 WIFIは非アドホックワイヤレスネットワークのみを検出しますか? Androidをラップトップからアドホックネットワーク設定に接続する方法があるかどうか疑問に思っていました。

61
Cyril Horad

Googleが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/ を参照してください。

Update:数年前になりましたが、ad hoc network接続が必要なときはいつでも私が使用する電話 CyanogenMod 。これらの機能へのプログラムによるアクセスとスクリプトによるアクセスの両方、およびWiFi設定メニューでアドホック(ibss)ネットワークを作成する機能を提供します。

38
Andy

特にad hocワイヤレスネットワークを使用する場合、 Andyの答え が唯一のようですオプション。ただし、必要な手段を使用してWi-fi経由でラップトップのインターネット接続を共有する場合は、少なくとも2つのオプションがあります。

  1. ラップトップをルーターとして使用して、 Virtual Router または Connectify を使用してwifiホットスポットを作成します。素敵な一連の指示を見つけることができます こちら
  2. Wi-fi Direct プロトコルを使用して、それをサポートするデバイス間で直接接続を作成しますが、Androidデバイスのサポートは制限されています*、Windowsではこの機能Windows 8のみのようです。

* Android 2.3を搭載した一部の携帯電話は、Wi-fi Directを有効にする独自のOS拡張機能を備えています(ほとんどが新しいSamsung携帯電話)が、Android 4はこれを完全にサポートする必要があります( ソース )。

15
Silveri

ここで興味のあることに気付きました。2.3.4電話では、[設定]> [ワイヤレスとネットワーク]メニューにAP/AdHoc SSIDが表示されません。 4.0.3を実行しているAcer A500では、(*)が前に付いて表示されます

しかし、私が適応した次のコードでは(ソースを思い出せません、すみません!)2.3.4電話のWifiスキャンにアドホックが表示されます。ソケット+ 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 + [letter 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>

お役に立てば幸いです!

5
Chris

利用可能なネットワークアダプターの1つとしてMicrosoft Virtual WiFiミニポートアダプターがある場合、次の操作を実行できます。

  • Windowsコマンドプロセッサ(cmd)を管理者として実行する
  • タイプ:netsh wlan set hostednetwork mode=allow ssid=NAME key=PASSWORD
  • 次に:netsh wlan start hostednetwork
  • 「コントロールパネル\ネットワークとインターネット\ネットワーク接続」を開きます
  • アクティブなネットワークアダプター(インターネットへの接続に使用するもの)を右クリックし、[プロパティ]をクリックします。
  • 次に、[共有]タブを開きます
  • [他のネットワークユーザーに接続を許可する...]をオンにして、WiFiミニポートアダプターを選択します。
  • 終了したら、次を入力します:netsh wlan stop hostednetwork

それでおしまい!

ソース: ソフトウェアを使用せずにAndroid電話をアドホックネットワークに接続する方法

5
w35l3y

あなたは正しいですが、逆の方法でそれを行うことができることに注意してください-Android Wifiテザリングを使用して電話をベースステーションとしてセットアップし、ラップトップからベースステーションに接続します。

1
gby