如何查看 Android 上是不是连接了 Wi-Fi?

Posted

技术标签:

【中文标题】如何查看 Android 上是不是连接了 Wi-Fi?【英文标题】:How do I see if Wi-Fi is connected on Android?如何查看 Android 上是否连接了 Wi-Fi? 【发布时间】:2011-04-19 23:18:45 【问题描述】:

我不希望我的用户尝试下载某些东西,除非他们连接了 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 作为状态。

【问题讨论】:

2021 工作解决方案:***.com/questions/66573565/… 【参考方案1】:

您应该能够使用 ConnectivityManager 来获取 Wi-Fi 适配器的状态。从那里你可以check if it is connected or even available。

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 才能正常工作。

NOTE2public NetworkInfo getNetworkInfo (int networkType) 现已弃用:

此方法在 API 级别 23 中已弃用。此方法不 支持多个相同类型的连接网络。采用 getAllNetworks() 和 getNetworkInfo(android.net.Network) 代替。

NOTE3public static final int TYPE_WIFI 现已弃用:

此常量在 API 级别 28 中已弃用。 应用程序应改为使用 NetworkCapabilities.hasTransport(int) 或 requestNetwork(NetworkRequest, NetworkCallback) 来请求适当的网络。支持的传输。

【讨论】:

应该注意(对于我们这里的菜鸟),您需要将 android.permission.ACCESS_NETWORK_STATE 添加到您的 AndroidManifest.xml 中才能正常工作。 在最新版本的 Android 中,您需要在 mWiFi 中检查 NULL ...您的代码可能会引发空指针错误。请参阅developer.android.com/training/basics/network-ops/managing.html,特别是“方法 getActiveNetworkInfo() 返回一个 NetworkInfo...” 它也适用于以太网接口。我刚改成 ConnectivityManager.TYPE_ETHERNET 方法 NetworkInfo.isConnected() 现在在 API-23 中已弃用。我在下面发布了一个解决方案。 NetworkInfo.getType() 和 ConnectivityManager.TYPE_WIFI 现在在 API 28 中已弃用。为避免 lint 警告,您应该使用类似 connectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)【参考方案2】:

由于方法 NetworkInfo.isConnected() 现在在 API-23不推荐使用,这里有一个方法可以检测 Wi- Fi 适配器已打开并且还使用 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
    

【讨论】:

值得一提的是wifiInfo可以为null,所以我认为你应该在获取网络ID之前检查null NetworkInfo.isConnected() 在我看来并没有被弃用。 别忘了添加权限:android.permission.ACCESS_WIFI_STATE 在没有定位权限和定位模式的情况下,这将不再在 Android Q 中工作,请参阅issuetracker.google.com/issues/136021574。 @EricRobertBrewer 评论不再是最新的。现在,API 29+ 已弃用。【参考方案3】:

我只是使用以下内容:

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

在您调用 getSupplicantState() 时将返回其中一种状态;

关联 - 关联完成。

ASSOCIATING - 试图与 一个接入点。

已完成 - 所有身份验证 完全的。

DISCONNECTED - 此状态表示 该客户端没有关联,但 可能会开始寻找访问权限 观点。

DORMANT - Android 添加的状态 当客户端发出 显式 DISCONNECT 命令。

FOUR_WAY_HANDSHAKE - WPA 四向键 正在进行握手。

GROUP_HANDSHAKE - WPA 组密钥 正在进行握手。

INACTIVE - 非活动状态。

INVALID - 一个伪状态,应该 通常永远不会被看到。

扫描 - 扫描网络。

未初始化 - 无连接。

【讨论】:

hi Donal。我用同样的方法来获取我们的设备是否连接到 wifi。但另外我需要知道当前使用 WIFI 的应用程序名称。如何做到这一点? @AbhishekB,抱歉,我没有这方面的经验,或许可以尝试查看一些 Wi-Fi 监控应用程序,看看是否有可以查看代码的开源应用程序. 我对此解决方案持怀疑态度,因为仅在使用 WPA(或 WPA 的某些变体)时才使用请求者:如果用户连接到没有身份验证或 WEP 的 AP,则不涉及请求者. 即使我没有使用 wifi,它仍然显示为“已完成” 上述状态是否有系统广播意图? @DonalRafferty【参考方案4】:

我在我的应用程序中使用它来检查活动网络是否是 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 现在NetworkInfo#isConnected已弃用也是最好的答案 绝对是今年(2017 年)的最佳答案。 2020 年也是最佳解决方案,因为 Android Q 为本文中的一些解决方案请求位置权限。这无需位置权限即可工作。【参考方案5】:

我看了几个这样的问题并想出了这个:

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 来检查我的许可证,它似乎工作得很好。

【讨论】:

看起来不错,但我不确定为什么您会再次引用 ConnectivityManager。在这个例子中 connManager 和 connManager1 都是同一个对象 TYPE_MOBLIE 是指 3gnet 还是 gprs 网? TYPE_MOBILE 表示使用您的运营商的任何数据 - 2G (GPRS...)、3G (HSDPA...) 或 4G (LTE...)。 您可以添加 TYPE_ETHERNET,当将 android 连接到以太网时效果很好 值得注意的是,如果网络不存在,getNetworkInfo() 将返回 null。因此,如果设备没有移动连接,这将引发错误。在大多数情况下,TYPE_ETHERNET 在这种情况下会导致 null,因为大多数设备都没有以太网连接。【参考方案6】:

虽然Jason's answer 是正确的,但现在 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;

【讨论】:

【参考方案7】:

自 API 级别 29 起,NetworkInfo 类以及相关的访问方法(如 ConnectivityManager#getNetworkInfo()ConnectivityManager#getActiveNetworkInfo())已被弃用。

documentation 现在建议人们使用ConnectivityManager.NetworkCallback API 进行异步回调监控,或者使用ConnectivityManager#getNetworkCapabilitiesConnectivityManager#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

Java:

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 添加到您的清单文件中。

【讨论】:

【参考方案8】:

许多答案使用已弃用的代码,或更高 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;

【讨论】:

【参考方案9】:

以下代码(在 Kotlin 中)从 API 21 开始工作,直到至少当前的 API 版本 (API 29)。 函数 getWifiState() 返回 WiFi 网络状态的 3 个可能值之一: 在枚举类中定义的 Disable、EnabledNotConnected 和 Connected。 这允许采取更精细的决策,例如通知用户启用 WiFi,或者如果已经启用,则连接到可用网络之一。 但是,如果只需要一个布尔值来指示 WiFi 接口是否已连接到网络,那么另一个函数 isWifiConnected() 将为您提供。它使用前一个并将结果与​​ Connected 进行比较。

它在之前的一些答案中受到启发,但试图解决由 Android API 的演变或 IP V6 的可用性缓慢增加所引入的问题。 诀窍是使用:

wifiManager.connectionInfo.bssid != null 

代替:

    getIpAddress() == 0 仅对 IP V4 有效或 getNetworkId() == -1 现在需要另一个特殊权限(位置)

根据文档:https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid 如果未连接到网络,它将返回 null。即使我们无权获取真实值,如果我们连接,它仍然会返回 null 以外的值。

还要记住以下几点:

在 android.os.Build.VERSION_CODES#N 之前的版本中,此对象 只能从 Context#getApplicationContext() 获取,并且 不来自任何其他派生上下文以避免内存泄漏 调用进程。

在Manifest中,不要忘记添加:

<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)
    

【讨论】:

【参考方案10】:

使用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_UN跨度> developer.android.com/reference/android/net/wifi/… 在没有定位权限和定位模式的情况下,这将不再适用于 Android Q,请参阅issuetracker.google.com/issues/136021574。【参考方案11】:
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;

【讨论】:

添加一些解释而不是代码会更好。 我会使用 isConnected(),文档说:boolean isConnectedOrConnecting () 表示网络连接是否存在或正在建立过程中。这对于需要执行与网络相关的任何操作(而不是读取或写入数据)的应用程序很有用。对于后者,请改为调用isConnected(),这样可以保证网络完全可用。【参考方案12】:

试试这个方法。

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;

此方法将有助于查找可用或不可用的互联网连接。

【讨论】:

我正在寻找活动连接是否是 wifi。此外,无需对 conMgr 进行空检查,它永远不会为空。 你能检查一下this question吗? :(【参考方案13】:

这对我有用:

    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" />

【讨论】:

【参考方案14】:

类似于@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 已弃用【参考方案15】:

这适用于 Q 之前和之后的 Android 设备

fun isWifiConnected(context: Context):Boolean 
    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
             val capabilities = cm.getNetworkCapabilities(cm.activeNetwork)
             capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)==true
         else 
            val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
            activeNetwork?.typeName?.contains("wifi",ignoreCase = true)?:false
        

【讨论】:

【参考方案16】:

这是我在应用中用作实用方法的方法:

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 方法对我不起作用。【参考方案17】:

在新版本的安卓中

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。【参考方案18】:

这是一个更简单的解决方案。见堆栈溢出 问题Checking Wi-Fi enabled or not on Android

附:不要忘记将代码添加到 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>

【讨论】:

【参考方案19】:

试试

wifiManager.getConnectionInfo().getIpAddress()

这将返回 0,直到设备具有可用连接(在我的机器上,三星 SM-T280,Android 5.1.1)。

【讨论】:

【参考方案20】:

WIFI没有激活可以打开如下 1.检查@Jason Knight回答的WIFI状态 2.如果没有激活,激活它 不要忘记在清单文件中添加WIFI权限

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

你的 Java 类应该是这样的

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();

【讨论】:

【参考方案21】:

为 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;
        
    

在 Manifest 文件中添加以下权限:

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

【讨论】:

【参考方案22】:

有点老问题,但这是我使用的。要求最低 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;

【讨论】:

【参考方案23】:
val wifi = context!!.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager?        
         if (wifi!!.isWifiEnabled) 
              //do action here
    
         else 
             //do action here
    
        
                    

【讨论】:

【参考方案24】:

这适用于最新版本的android:

fun getConnectionType(context: Context): ConnectivityType 
    var result = NONE
    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
        if (cm != null) 
            val capabilities = cm.getNetworkCapabilities(cm.activeNetwork)
            if (capabilities != null) 
                when 
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> 
                        result = WIFI
                    
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> 
                        result = MOBILE_DATA
                    
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_***) -> 
                        result = ***
                    
                
            
        
     else 
        if (cm != null) 
            val activeNetwork = cm.activeNetworkInfo
            if (activeNetwork != null) 
                // connected to the internet
                when (activeNetwork.type) 
                    ConnectivityManager.TYPE_WIFI -> 
                        result = WIFI
                    
                    ConnectivityManager.TYPE_MOBILE -> 
                        result = MOBILE_DATA
                    
                    ConnectivityManager.TYPE_*** -> 
                        result = ***
                    
                
            
        
    
    return result


enum class ConnectivityType 
    NONE,
    MOBILE_DATA,
    WIFI,
    ***,

在清单中:

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

【讨论】:

以上是关于如何查看 Android 上是不是连接了 Wi-Fi?的主要内容,如果未能解决你的问题,请参考以下文章

ADB抓取手机日志

如何在 Android 中查看 HDMI 设备连接状态?

如何查看我的 Xamarin.Forms 应用程序是不是在 Visual Studio 中的 Android 6(或更高版本)上运行或/和可运行?

在 Android 浏览器上嵌入谷歌文档查看器 iframe

如何查看Linux下网卡是不是连接(UP)?

Android 蓝牙:是不是已连接?