Development Tip

안드로이드 와이파이를 애드혹 와이파 이에 연결하는 방법?

yourdevel 2020. 11. 28. 12:35
반응형

안드로이드 와이파이를 애드혹 와이파 이에 연결하는 방법?


나는 안드로이드 시스템에 익숙하지 않습니다. 이것이 맞습니까, android 2.2.1 WIFI는 비 Ad Hoc 무선 네트워크 만 감지합니까? 내 안드로이드를 랩톱의 애드혹 네트워크 설정에 연결하는 방법이 있는지 궁금합니다.


Google은 Android가 공식적으로 출시 된 이후로 계속 출시 될 것이라고 말했지만 현재 Android에서 기본적으로 지원되지 않는다는 것은 맞습니다.

기본적으로 지원되지는 않지만 현재까지 출시 된 모든 Android 기기의 하드웨어는이를 지원합니다. 소프트웨어에서 비활성화되어 있으며 이러한 기능을 사용하려면 활성화해야합니다.

그러나이 작업을 수행하는 것은 매우 쉽지만 루트 권한이 필요하며 세부 사항은 장치마다 약간 다를 수 있습니다. 이에 대한 자세한 정보를 얻을 수있는 가장 좋은 소스는 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의 대답 이 유일한 옵션 인 것 같습니다. 그러나 필요한 수단을 사용하여 Wi-Fi를 통해 랩톱의 인터넷 연결을 공유하려는 경우 최소한 두 가지 옵션이 더 있습니다.

  1. 노트북을 라우터로 사용하여 가상 라우터 또는 Connectify를 사용하여 Wi-Fi 핫스팟을 만듭니다 . 여기에서 멋진 지침을 찾을 수 있습니다 .
  2. 사용 와이파이 직접 안드로이드 장치를 지원 * 제한되어 있지만,이를 지원하는 모든 장치 사이의 직접 연결을 생성 및 Windows와 기능이 윈도우 8 만 할 것으로 보인다 프로토콜을.

* Android 2.3이 설치된 일부 휴대폰에는 Wi-Fi Direct (대부분 최신 삼성 휴대폰)를 지원하는 독점 OS 확장이 있지만 Android 4는이를 완벽하게 지원해야합니다 ( 소스 ).


여기서 흥미로운 점을 발견했습니다. 2.3.4 휴대폰에서 설정> 무선 및 네트워크 메뉴에서 AP / AdHoc SSID를 볼 수 없습니다. 4.0.3을 실행하는 Acer A500에서는 접두사가 (*)로 표시됩니다.

그러나 다음 코드에서 수정 한 코드 (소스를 기억할 수 없습니다. 죄송합니다!)에서 2.3.4 전화기의 Wifi 스캔에 Ad Hoc이 표시되는 것을 볼 수 있습니다. 나는 여전히 실제로 연결하고 소켓 + 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>

도움이 되었기를 바랍니다.


사용 가능한 네트워크 어댑터 중 하나로 Microsoft Virtual WiFi Miniport Adapter가있는 경우 다음을 수행 할 수 있습니다.

  • Windows 명령 프로세서 (cmd)를 관리자로 실행
  • 유형: netsh wlan set hostednetwork mode=allow ssid=NAME key=PASSWORD
  • 그때: netsh wlan start hostednetwork
  • "제어판 \ 네트워크 및 인터넷 \ 네트워크 연결"을 엽니 다.
  • 활성 네트워크 어댑터 (인터넷 연결에 사용하는 어댑터)를 마우스 오른쪽 버튼으로 클릭 한 다음 속성을 클릭합니다.
  • 그런 다음 공유 탭을 엽니 다.
  • Check "Allow other network users to connect..." and select your WiFi Miniport Adapter
  • Once finished, type: netsh wlan stop hostednetwork

That's it!

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


You are correct, but note that you can do it the other way around - use Android Wifi tethering that sets up the phone as a base station and connect to said base station from the laptop.

참고URL : https://stackoverflow.com/questions/5100928/how-to-connect-android-wifi-to-adhoc-wifi

반응형