Wi-Fi가 Android에 연결되어 있는지 어떻게 알 수 있습니까?


237

Wi-Fi에 연결되어 있지 않으면 사용자가 무언가를 다운로드하려고하지 않습니다. 그러나 Wi-Fi가 활성화되어 있는지 여부 만 알 수는 있지만 여전히 3G 연결이 가능합니다.

android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
    return false;
}

그러나 국가는 내가 기대하는 것이 아닙니다. Wi-Fi가 연결되어 있지만 OBTAINING_IPADDR상태로 표시됩니다.

답변:


463

ConnectivityManager를 사용하여 Wi-Fi 어댑터의 상태를 얻을 수 있어야합니다. 여기에서 연결되어 있거나 사용 가능한지 확인할 수 있습니다 .

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWifi.isConnected()) {
    // Do whatever
}

참고 : 추가 해야 할 점에 유의해야합니다 (여기서 n00bies의 경우).

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

너의 ~에게

이것이 작동하려면 AndroidManifest.xml .

NOTE2 : public NetworkInfo getNetworkInfo (int networkType)이제 더 이상 사용되지 않습니다 :

이 방법은 API 레벨 23에서 더 이상 사용되지 않습니다.이 방법은 동일한 유형의 여러 연결된 네트워크를 지원하지 않습니다. 대신 getAllNetworks () 및 getNetworkInfo (android.net.Network)를 사용하십시오.

NOTE3 : public static final int TYPE_WIFI이제 더 이상 사용되지 않습니다 :

이 상수는 API 레벨 28에서 더 이상 사용되지 않습니다. 대신 응용 프로그램은 NetworkCapabilities.hasTransport (int) 또는 requestNetwork (NetworkRequest, NetworkCallback)를 사용하여 적절한 네트워크를 요청해야합니다. 지원되는 전송 용.


72
이것이 android.permission.ACCESS_NETWORK_STATE작동하려면 AndroidManifest.xml에 추가해야한다는 점에 유의해야합니다 (여기에서는 noobies) .
mgalgs

10
최신 버전의 Android에서는 mWiFi에서 NULL을 확인해야합니다. 여기 코드에서 널 포인터 오류가 발생할 수 있습니다. 참조 developer.android.com/training/basics/network-ops/managing.html 와 "방법 getActiveNetworkInfo ()가 NetworkInfo을 ... 반환"특히
eb80

1
이더넷 인터페이스로도 효과가있었습니다. 난 그냥 변경 ConnectivityManager.TYPE_ETHERNET
MBH

3
API-23에서는 NetworkInfo.isConnected () 메소드가 더 이상 사용되지 않습니다. 아래에 솔루션을 게시하고 있습니다.
혁신적인

1
NetworkInfo.getType ()ConnectivityManager.TYPE_WIFI 는 이제 API 28에서 더 이상 사용되지 않습니다. 보푸라기 경고를 피하려면connectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
Vadik

75

방법 때문에 NetworkInfo.isConnected ()는 이제 중단API-23 , 여기에 무선 인터넷 어댑터에 있고 대신 WifiManager를 사용하는 액세스 포인트에 접속하는 경우를 검출하는 방법이다 :

private boolean checkWifiOnAndConnected() {
    WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON

        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();

        if( wifiInfo.getNetworkId() == -1 ){
            return false; // Not connected to an access point
        }
        return true; // Connected to an access point
    }
    else {
        return false; // Wi-Fi adapter is OFF
    }
}

4
wifiInfo는 null 일 수 있으므로 네트워크 ID를 얻기 전에 null을 확인해야한다고 생각합니다.
Nonos

2
NetworkInfo.isConnected()더 이상 사용되지 않는 것 같습니다.
EricRobertBrewer

허가를 추가하는 것을 잊지 마십시오 :android.permission.ACCESS_WIFI_STATE
Ton Snoei

1
위치 권한 및 위치 모드를 설정하지 않으면 Android Q에서 더 이상 작동하지 않습니다 ( issuetracker.google.com/issues/136021574 참조) .
Konsumierer

@EricRobertBrewer 의견이 더 이상 최신 상태가 아닙니다. 더 이상 사용되지 않는 API 29 이상입니다.
nuKs

35

나는 단순히 다음을 사용합니다.

SupplicantState supState; 
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
supState = wifiInfo.getSupplicantState();

getSupplicantState ()를 호출 할 때이 상태 중 하나를 반환합니다.

ASSOCIATED-연결 완료

ASSOCIATING-액세스 포인트와 연결하려고합니다.

완료-모든 인증이 완료되었습니다.

DISCONNECTED-이 상태는 클라이언트가 연결되어 있지 않지만 액세스 포인트를 찾기 시작할 가능성이 있음을 나타냅니다.

DORMANT-클라이언트가 명시 적 DISCONNECT 명령을 실행할 때보고되는 Android 추가 상태입니다.

FOUR_WAY_HANDSHAKE-WPA 4 방향 키 핸드 셰이크가 진행 중입니다.

GROUP_HANDSHAKE-WPA 그룹 키 핸드 셰이크가 진행 중입니다.

비활성-비활성 상태.

유효하지 않음-일반적으로 볼 수없는 의사 상태입니다.

스캔-네트워크 스캔.

UNINITIALIZED-연결되지 않았습니다.


안녕 Donal. 나는 우리의 장치가 wifi에 연결되어 있는지 여부를 확인하는 동일한 방법을 사용했지만 추가로 현재 WIFI를 사용하는 앱 이름을 알아야합니다.
AbhishekB

@AbhishekB, 죄송하지만 그 경험이 없습니다 .Wi-Fi 모니터링 앱을 살펴보십시오. 코드를 검토 할 수있는 오픈 소스 앱이 있는지 확인하십시오.
Donal Rafferty

신청자가 WPA (또는 일부 변형 된 WPA)를 사용하는 경우에만 신청자가 사용되기 때문에이 솔루션이 의심됩니다. 사용자가 인증이나 WEP없이 AP에 연결하면 신청자가 관여하지 않습니다.
Tom

2
Wi-Fi
Evan Parsons

1
위에서 언급 한 국가에 대한 시스템 방송 의도가 있습니까? @DonalRafferty
Rohit Singh

19

활성 네트워크가 Wi-Fi인지 확인하기 위해 내 앱에서 이것을 사용하고 있습니다.

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI)
{

    // Do your work here

}

이것은 active네트워크 (다운로드에 사용될 네트워크)가 WiFi 인지 확인하기 때문에 가장 좋은 대답입니다.
Gavriel

1
또한 NetworkInfo#isConnected더 이상 사용되지 않는 최고의 답변입니다.
Tash Pemhiwa

올해 최고의 답변입니다 (2017).
Daniel Nugent

18

나는 이와 같은 몇 가지 질문을 살펴보고 이것을 생각해 냈습니다.

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if (wifi.isConnected()){
    // If Wi-Fi connected
}

if (mobile.isConnected()) {
    // If Internet connected
}

Root Toolbox PRO에서 라이센스 확인을 위해 if를 사용하는데 훌륭하게 작동하는 것 같습니다.


8
잘 보이지만 ConnectivityManager에 대한 두 번째 참조를 얻는 이유를 잘 모르겠습니다. 이 예에서 connManager와 connManager1은 모두 동일한 객체입니다.
Nathan

1
TYPE_MOBLIE는 3gnet 또는 gprs net을 의미합니까?
herbertD

1
TYPE_MOBILE은 2G (GPRS ...), 3G (HSDPA ...) 또는 4G (LTE ...)와 같은 이동 통신사를 사용하는 모든 데이터를 의미합니다.
Eugen Pechanec

1
Android에 이더넷을 연결할 때 제대로 작동하는 TYPE_ETHERNET 을 추가 할 수 있습니다
MBH

1
그것은 마음에 가치 베어링이며, getNetworkInfo()네트워크가 존재하지 않는 경우, 널 (null)을 반환합니다. 따라서 장치에 모바일 연결이 없으면 오류가 발생합니다. 대부분의 경우 이더넷 연결이 없기 때문에 대부분의 경우 TYPE_ETHERNET은이 경우 널을 발생시킵니다.
Knossos

7

하지만 제이슨의 대답은 정확한지, 요즘 getNetWorkInfo (INT)는 사용되지 않는 방법이다. 따라서 다음 함수는 좋은 대안이 될 것입니다.

public static boolean isWifiAvailable (Context context)
{
    boolean br = false;
    ConnectivityManager cm = null;
    NetworkInfo ni = null;

    cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    ni = cm.getActiveNetworkInfo();
    br = ((null != ni) && (ni.isConnected()) && (ni.getType() == ConnectivityManager.TYPE_WIFI));

    return br;
}

3

사용 WifiManager당신이 할 수 있습니다 :

WifiManager wifi = (WifiManager) getSystemService (Context.WIFI_SERVICE);
if (wifi.getConnectionInfo().getNetworkId() != -1) {/* connected */}

getNeworkId 메소드 는 네트워크에 연결되지 않은 경우에만 -1을 리턴합니다.


WIFI_STATE_DISABLED 상수 값 : 1 (0x00000001) WIFI_STATE_DISABLING 상수 값 : 0 (0x00000000) WIFI_STATE_ENABLED 상수 값 : 3 (0x00000003) WIFI_STATE_ENABLING 상수 값 : 2 (0x00000002) WIFI_STATE_UNKNOWN 상수 값 :
17x11


위치 권한 및 위치 모드를 설정하지 않으면 Android Q에서 더 이상 작동하지 않습니다 ( issuetracker.google.com/issues/136021574 참조) .
Konsumierer

3
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
boolean is3g = manager.getNetworkInfo(
                  ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
boolean isWifi = manager.getNetworkInfo(
                    ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

Log.v("", is3g + " ConnectivityManager Test " + isWifi);
if (!is3g && !isWifi) {
    Toast.makeText(
        getApplicationContext(),
        "Please make sure, your network connection is ON ",
        Toast.LENGTH_LONG).show();
}
else {
    // Put your function() to go further;
}

1
코드보다는 설명을 추가하는 것이 좋습니다.
EdChum

2
문서는 isConnected ()를 사용 boolean isConnectedOrConnecting ()합니다. 데이터를 읽거나 쓰는 것 이외의 네트워크 관련 작업을 수행해야하는 응용 프로그램에 적합합니다. 후자의 경우 isConnected()네트워크를 완전히 사용할 수 있도록 대신 전화 하십시오.
18446744073709551615

3

다음 코드 (Kotlin)는 API 21부터 최신 API 버전 (API 29)까지 작동합니다. getWifiState () 함수는 WiFi 네트워크 상태에 대해 열거 형 클래스에 정의 된 Disable, EnabledNotConnected 및 Connected의 3 가지 값 중 하나를 반환합니다. 이를 통해 사용자에게 WiFi를 활성화하거나 이미 활성화 된 경우 사용 가능한 네트워크 중 하나에 연결하도록 알리는 등의 세부적인 결정을 내릴 수 있습니다. 그러나 필요한 모든 것이 WiFi 인터페이스가 네트워크에 연결되어 있는지 여부를 나타내는 부울이면 isWifiConnected () 함수가이를 제공합니다. 이전 항목을 사용하고 결과를 연결됨과 비교합니다.

이전 답변 중 일부에서 영감을 얻었지만 Android API의 진화 또는 천천히 증가하는 IP V6의 가용성으로 인한 문제를 해결하려고합니다. 트릭은 다음을 사용하는 것이 었습니다.

wifiManager.connectionInfo.bssid != null 

대신에:

  1. getIpAddress () == 0 IP V4에만 유효하거나
  2. getNetworkId () == -1 이제 다른 특수 권한이 ​​필요합니다 (위치)

설명서에 따르면 https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid 네트워크에 연결되어 있지 않으면 null을 반환합니다. 그리고 실제 값을 얻을 권한이 없어도 연결되어 있으면 null 이외의 값을 반환합니다.

또한 다음 사항에 유의하십시오.

android.os.Build.VERSION_CODES # N 이전 릴리스에서이 객체는 호출 프로세스 내에서 메모리 누수를 피하기 위해 다른 파생 된 컨텍스트가 아닌 Context # getApplicationContext ()에서만 가져와야합니다.

매니페스트에서 다음을 추가하는 것을 잊지 마십시오.

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

제안 된 코드는 다음과 같습니다.

class MyViewModel(application: Application) : AndroidViewModel(application) {

   // Get application context
    private val myAppContext: Context = getApplication<Application>().applicationContext

   // Define the different possible states for the WiFi Connection
    internal enum class WifiState {
        Disabled,               // WiFi is not enabled
        EnabledNotConnected,    // WiFi is enabled but we are not connected to any WiFi network
        Connected,              // Connected to a WiFi network
    }

    // Get the current state of the WiFi network
    private fun getWifiState() : WifiState {

        val wifiManager : WifiManager = myAppContext.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

        return if (wifiManager.isWifiEnabled) {
                    if (wifiManager.connectionInfo.bssid != null)
                        WifiState.Connected
                    else
                        WifiState.EnabledNotConnected
               } else {
                    WifiState.Disabled
               }
    }

    // Returns true if we are connected to a WiFi network
    private fun isWiFiConnected() : Boolean {
        return (getWifiState() == WifiState.Connected)
    }
}

3

NetworkInfo클래스는 관련 액세스와 같은 방법과 함께, API 레벨 29로 사용되지 않습니다 ConnectivityManager#getNetworkInfo()ConnectivityManager#getActiveNetworkInfo().

문서 는 사람들에게 ConnectivityManager.NetworkCallback비동기 콜백 모니터링을 위해 API를 사용 ConnectivityManager#getNetworkCapabilities하거나 ConnectivityManager#getLinkProperties네트워크 정보의 동기화 액세스를 위해 사용하도록 제안 합니다

대신 호출자는 ConnectivityManager.NetworkCallback API를 사용하여 연결 변경에 대해 배우거나 ConnectivityManager # getNetworkCapabilities 또는 ConnectivityManager # getLinkProperties를 사용하여 정보를 동 기적으로 가져 오도록 전환해야합니다.


WiFi가 연결되어 있는지 확인하려면 다음 코드를 사용하십시오.

코 틀린 :

val connMgr = applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
connMgr?: return false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    val network: Network = connMgr.activeNetwork ?: return false
    val capabilities = connMgr.getNetworkCapabilities(network)
    return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
} else {
    val networkInfo = connMgr.activeNetworkInfo ?: return false
    return networkInfo.isConnected && networkInfo.type == ConnectivityManager.TYPE_WIFI
}

자바:

ConnectivityManager connMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connMgr == null) {
    return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    Network network = connMgr.getActiveNetwork();
    if (network == null) return false;
    NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
    return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
} else {
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
}

권한을 추가해야합니다 ACCESS_NETWORK_STATE매니페스트 파일에 을 해야합니다.


2

이 방법을 사용해보십시오.

public boolean isInternetConnected() {
    ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean ret = true;
    if (conMgr != null) {
        NetworkInfo i = conMgr.getActiveNetworkInfo();

        if (i != null) {
            if (!i.isConnected()) {
                ret = false;
            }

            if (!i.isAvailable()) {
                ret = false;
            }
        }

        if (i == null)
            ret = false;
    } else
        ret = false;
    return ret;
}

이 방법은 사용 가능한 인터넷 연결을 찾는 데 도움이됩니다.


1
활성 연결이 wifi인지 구체적으로보고있었습니다. 또한 conMgr에서 null 검사를 수행 할 필요가 없으므로 null이되지 않습니다.
Nathan Schwermann

이 질문 을 확인할 수 있습니까 ? :(
Skizo-ozᴉʞS

2

이것은 나를 위해 작동합니다 :

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

    // Mobile
    State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();

    // Wi-Fi
    State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

    // And then use it like this:

    if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Mobile is Enabled :) ....",Toast.LENGTH_LONG).show();
    }
    else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Wifi is Enabled  :) ....",Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(Wifi_Gprs.this,"No Wifi or Gprs Enabled :( ....",Toast.LENGTH_LONG).show();
    }

이 권한을 추가하십시오.

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2

많은 답변이 더 이상 사용되지 않는 코드 또는 더 높은 API 버전에서 사용 가능한 코드를 사용합니다. 이제 나는 이런 것을 사용합니다

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(connectivityManager != null) {
            for (Network net : connectivityManager.getAllNetworks()) {
                NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(net);
                if (nc != null && nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                        && nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))
                    return true;
            }
        }
        return false;

1

다음은 내 앱에서 유틸리티 방법으로 사용하는 것입니다.

public static boolean isDeviceOnWifi(final Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        return mWifi != null && mWifi.isConnectedOrConnecting();
}

연결 설정을 확인할 때 isConnectedOrConnecting 방법이 중요하다는 점을 지적하는 것이 좋습니다. IsConnected 방법이 작동하지 않았습니다.
빈센트

1

새 버전의 Android

private void getWifiInfo(Context context) {
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Network[] networks = connManager.getAllNetworks();

    if(networks == null || networks.length == 0)
        return;

    for( int i = 0; i < networks.length; i++) {
        Network ntk = networks[i];
        NetworkInfo ntkInfo = connManager.getNetworkInfo(ntk);
        if (ntkInfo.getType() == ConnectivityManager.TYPE_WIFI && ntkInfo.isConnected() ) {
            final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
            if (connectionInfo != null) {
                // add some code here
            }
        }

    }
}

선입관도 추가하십시오


connManager.getAllNetworks()API 레벨 21이 필요합니다.
Jawand Singh

1

@Jason Knight와 비슷하지만 Kotlin 방식으로 :

val connManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)

if (mWifi.isConnected) {
     // Do whatever
}

ConnectivityManager.TYPE_WIFI더 이상 사용되지 않음
Jérôme Pietri

0

이것은 더 쉬운 해결책입니다. Android에서 스택 오버플로 질문 Wi-Fi 사용 여부 확인 .

PS 권한을 허용하기 위해 manifest.xml 파일에 코드를 추가하는 것을 잊지 마십시오. 아래 그림과 같이.

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

0

시험

wifiManager.getConnectionInfo().getIpAddress()

장치가 사용 가능한 연결 (내 컴퓨터, Samsung SM-T280, Android 5.1.1)이 될 때까지 0을 반환합니다.


0

다음과 같이 활성화되지 않은 경우 WIFI를 켤 수 있습니다. @Jason Knight가 답변 한 WIFI 상태를 확인하십시오. 2. 활성화되지 않은 경우 매니페스트 파일에 WIFI 권한을 추가하는 것을 잊지 마십시오

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

당신의 자바 클래스는

public class TestApp extends Activity {
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //check WIFI activation
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if (mWifi.isConnected() == false) {
        showWIFIDisabledAlertToUser();
    }
    else {
        Toast.makeText(this, "WIFI is Enabled in your devide", Toast.LENGTH_SHORT).show();
    }
}


private void showWIFIDisabledAlertToUser(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("WIFI is disabled in your device. Would you like to enable it?")
            .setCancelable(false)
            .setPositiveButton("Goto Settings Page To Enable WIFI",
                    new DialogInterface.OnClickListener(){
                        public void onClick(DialogInterface dialog, int id){
                            Intent callGPSSettingIntent = new Intent(
                                    Settings.ACTION_WIFI_SETTINGS);
                            startActivity(callGPSSettingIntent);
                        }
                    });
    alertDialogBuilder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int id){
                    dialog.cancel();
                }
            });
    AlertDialog alert = alertDialogBuilder.create();
    alert.show();
}

}


0

JAVA에 추가하십시오.

public boolean CheckWifiConnection() {
        ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
        if (conMgr.getActiveNetworkInfo() != null
                && conMgr.getActiveNetworkInfo().isAvailable()
                && conMgr.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    }

매니페스트 파일에서 다음 권한을 추가하십시오.

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

0

옛날의 질문이지만 이것이 내가 사용하는 것입니다. 최소 API 레벨 21이 필요합니다. 또한 사용되지 않는 Networkinfo API를 고려합니다.

boolean isWifiConn = false;
    ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Network network = connMgr.getActiveNetwork();
        if (network == null) return false;
        NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
        if(capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)){
            isWifiConn = true;
            Toast.makeText(context,"Wifi connected Api >= "+Build.VERSION_CODES.M,Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(context,"Wifi not connected Api >= "+Build.VERSION_CODES.M,Toast.LENGTH_LONG).show();
        }
    } else {
        for (Network network : connMgr.getAllNetworks()) {
            NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected()) {
                isWifiConn = true;
                Toast.makeText(context,"Wifi connected ",Toast.LENGTH_LONG).show();
                break;
            }else{
                Toast.makeText(context,"Wifi not connected ",Toast.LENGTH_LONG).show();
            }
        }
    }
    return isWifiConn;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.