Android : 프로그래밍 방식으로 Wi-Fi 또는 인터넷 연결을 활성화 / 비활성화하는 방법


82

연결 관리자 클래스를 사용하여 Wi-Fi 또는 인터넷 네트워크에 액세스 할 수 있습니다.

ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

// ARE WE CONNECTED TO THE NET
if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
  connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
  // ...
}

여기서 01각각 모바일 및 Wi-Fi 연결을 나타냅니다.

내 Android 장치가 둘 다에 연결된 경우 네트워크간에 전환 할 수 있습니까? 아니면 네트워크를 비활성화 할 수 있습니까? 함수를 사용하는 것과 같습니다.

connec.getNetworkInfo(0).setState(NetworkInfo.State.DISCONNECTED);

1
모바일 데이터 비활성화 옵션에 대한 솔루션을 얻었습니까?
Parthi

답변:


184

Wi-Fi 활성화 또는 비활성화에 대해 알고 있습니다.

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);

상태가 될 수 true있거나 false요구 사항에 따라.

편집하다:

매니페스트 파일에 다음 권한도 필요합니다.

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 

47
또한 매니페스트 :<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
Comic Sans MS Lover

3
wifiManager.reconnect ()와 다른가요? wifiManager.reassociate ()는 어떻습니까? 또한 위의 접근 방식에서 WiFi를 재설정하려면 wifiManager.setWifiEnabled (false) 및 wifiManager.setWifiEnabled (true)를 다시 호출 할 수 있습니까? 아니면 먼저 비활성화 한 다음 다시 활성화하기 전에 신호 (방송 수신기 등)를 기다려야합니까?
Marchy

당신이 원하는 경우 데모 튜토리얼 FOT 다음은 여기 : demoadda.com/demo/android/...
Kishan Dhamat

“<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />”또한 필요합니다.
zionpi

Application에서 M 기기의 WiFi 제어가 가능한가요?
Nithinjith

30

WiFi 활성화하기 :

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(true);

WiFi를 비활성화하려면 :

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(false);

참고 : WiFi 상태로 액세스하려면 AndroidManifest.xml 파일에 다음 권한을 추가해야합니다.

android.permission.ACCESS_WIFI_STATE
android.permission.UPDATE_DEVICE_STATS 
android.permission.CHANGE_WIFI_STATE

4
최소한 Android 4.2에서는 CHANGE_WIFI_STATE 만 필요합니다.
voghDev 2014 년

1
UPDATE_DEVICE_STATS는 시스템 앱 전용입니다
marienke 2016-09-05

Android Q에서는 Wi-Fi를 직접 켜고 끌 수 없습니다
Ravindra Kushwaha

12

완벽한 솔루션 :

try {
    WifiManager wifi = (WifiManager) 
        context.getSystemService(Context.WIFI_SERVICE);

    WifiConfiguration wc = new WifiConfiguration();
    wc.SSID = "\"SSIDName\"";
    wc.preSharedKey  = "\"password\"";
    wc.hiddenSSID = true;
    wc.status = WifiConfiguration.Status.ENABLED; 

    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
    wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
    wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

    wc.allowedPairwiseCiphers
        .set(WifiConfiguration.PairwiseCipher.TKIP);
    wc.allowedPairwiseCiphers
        .set(WifiConfiguration.PairwiseCipher.CCMP);
    wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);

    boolean b=wifi.isWifiEnabled();
    if (b) {
        wifi.setWifiEnabled(false);
        Toast.makeText(context, "yes", Toast.LENGTH_SHORT).show();
    } else {
        wifi.setWifiEnabled(true);
        Toast.makeText(context, "no", Toast.LENGTH_SHORT).show();
    }
    //Log.d("WifiPreference", "enableNetwork returned " + b );

} catch (Exception e) {
    e.printStackTrace();
}

참조 : http://amitkumar-android.blogspot.com/p/installation-steps.html


1
wifi 구성으로 wifi 관리자를 설정하는 호출이 누락되었습니다. wifi.addNetwork (wc);
오류 454

4
SSID와 암호를 하드 코딩하는 이유는 무엇입니까? 좋은 생각이 아닙니다.
lifeson106

@ lifeson106 데모 목적으로 만 생각합니다.
Bertram Gilfoyle

4

Wi-Fi 비활성화를 활성화하려면 WifiManager클래스를 사용하여 Wi-Fi 에 대한 시스템 (안드로이드 장치) 서비스를 가져옵니다.

WifiManager wifi =(WifiManager)getSystemService(Context.WIFI_SERVICE); 

이제 클래스 의 객체 wifiWifiManager사용하여 Wi-Fi 상태를 가져옵니다.

if(wifi.isWifiEnabled())
    //Perform Operation
else
    //Other Operation

그리고 가장 중요한 것은 Android Manifest 파일에 다음 권한을 부여하는 것을 잊지 마십시오.

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Android에서 Wifi 활성화 / 비활성화에 대한 프로젝트의 자세한 정보와 전체 샘플 코드를 얻으려면 내 웹 사이트 링크를 방문하십시오 .


3

Android Q (Android 10) 에서는 더 이상 프로그래밍 방식으로 Wi-Fi를 활성화 / 비활성화 할 수 없습니다. 설정 패널 을 사용 하여 Wi-Fi 연결을 전환합니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    val panelIntent = Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)
    startActivityForResult(panelIntent, 0)
} else {
    // use previous solution, add appropriate permissions to AndroidManifest file (see answers above)
    (this.context?.getSystemService(Context.WIFI_SERVICE) as? WifiManager)?.apply { isWifiEnabled = true /*or false*/ }
}

1

이 권한을 매니페스트에 추가하고 위의 코드를 사용하여 WiFi 상태를 변경하십시오.

 <!--permission ge enable and disable WIFI in android-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

1

컨텍스트 개체에 직접 액세스 할 수 없습니다.
내 솔루션은 다음과 같습니다.

Context appContext = Android.App.Application.Context;
var wifiManager = (WifiManager)appContext.GetSystemService(WifiService);
wifiManager.SetWifiEnabled(state);

또한 나는 예를 들어 일부 글을 변경해야했습니다. WIFI_SERVICE 대 WifiService.


0

다음 코드를 사용하여 Android 10 이전 기기 에서 Wi-Fi를 활성화 / 비활성화 할 수 있습니다.

WifiManager wifiManager = 
(WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);

wifiManager.setWifiEnabled (status);

그러나 참고 가 불가능하다는 안드로이드 (10)에 더 이상 이렇게 아마뿐만 아니라 앞서 가고 있습니다.
https://issuetracker.google.com/issues/141011684


0

Android 10 (Q) 이상 Wi-Fi를 활성화 / 비활성화 할 수 없습니다. 설정 의도를 열어야합니다.

// for android Q and above
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            Intent panelIntent = new 
Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY);
            startActivityForResult(panelIntent, 0);
        } else {
            // for previous android version
            WifiManager wifiManager = (WifiManager) 
this.getApplicationContext().getSystemService(WIFI_SERVICE);
            wifiManager.setWifiEnabled(true);
        }

매니페스트에서

 <uses-permission
    android:name="android.permission.CHANGE_WIFI_STATE"
    android:required="true" />

0

이 메서드는 이제 Android Q부터 더 이상 사용되지 않습니다.

이것은 정말 도움이 될 것입니다.

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {// if build version is less than Q try the old traditional method
                    if (!wifiManager.isWifiEnabled()) {
                        wifiManager.setWifiEnabled(true);
                        btnOnOff.setText("Wifi ONN");
                    } else {
                        wifiManager.setWifiEnabled(false);
                        btnOnOff.setText("Wifi OFF");
                    }
                } else {// if it is Android Q and above go for the newer way    NOTE: You can also use this code for less than android Q also
                    Intent panelIntent = new Intent(Settings.Panel.ACTION_WIFI);
                    startActivityForResult(panelIntent, 1);
                }

예를 들어 새롭거나 선호하는 방법을 가리킬 가치가 있습니까?
user1016765

이것은 질문에 대한 답을 제공하지 않습니다. 평판 이 충분 하면 모든 게시물댓글 수 있습니다 . 대신 질문자의 설명이 필요하지 않은 답변을 제공하세요 . - 리뷰에서
Ryan M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.