【问题标题】:Boolean Method for checking Internet Connectivity returning only false用于检查 Internet 连接的布尔方法仅返回 false
【发布时间】:2017-12-26 11:41:57
【问题描述】:

在我的应用程序中,我正在使用 WIFI 或移动数据连接检查手机是否连接到互联网,但问题是我的代码始终显示无法通过我的设备连接到 WIFI 来连接互联网。

这是我正在检查互联网连接的代码。

public class InternetDetector {
     private Context mcontext;

public InternetDetector(Context context) {
    this.mcontext = context;
}


    public boolean checkMobileInternetConn() {
        ConnectivityManager connectivity = (ConnectivityManager) mcontext
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        if (connectivity != null) {
            NetworkInfo info = connectivity.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

            if (info != null) {
                if (info.isConnected()) {
                    return true;
                }
            }
        }

        else if (connectivity != null) {
            NetworkInfo info = connectivity.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

            if (info != null) {
                if (info.isConnected()) {
                    return true;
                }
            }
        }


        return false;
    }


}

这就是我在其他活动中使用此类来检查连接的方式。但是代码总是转到 else 部分并且总是显示 toast。

if (allValid) {

         isConnectionExist = internetDetector.checkMobileInternetConn();
           if (isConnectionExist) {

              try {
                   new MyAsyncClass().execute();

                   } catch (Exception ex) {
                     Toast.makeText(getApplicationContext(), ex.toString(), Toast.LENGTH_SHORT).show();
                            }

                        } else {
                            Toast.makeText(getApplicationContext(), "No Internet Connection", Toast.LENGTH_SHORT).show();
                        }


                    }

我在 Manifest 文件中给出的权限是:-

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

【问题讨论】:

标签: java android android-connectivitymanager


【解决方案1】:

替代解决方案:

public boolean hasConnectivity() {
      ConnectivityManager connectivityManager = (ConnectivityManager) 
      context.getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
      return activeNetwork != null;
}

【讨论】:

  • 我猜布尔方法应该返回真假结果。你能解释一下我如何在我的代码中使用它。
【解决方案2】:

我用 hasConnectivity()

替换了 isConnectionExist 变量
if (allValid) {


       if (hasConnectivity()) {

          try {
               new MyAsyncClass().execute();

               } catch (Exception ex) {
                 Toast.makeText(getApplicationContext(), ex.toString(), Toast.LENGTH_SHORT).show();
                        }

                    } else {
                        Toast.makeText(getApplicationContext(), "No Internet Connection", Toast.LENGTH_SHORT).show();
                    }


                }

【讨论】:

    【解决方案3】:
    fun isOnline(context: Context): Boolean {
            try {
                val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
                val nInfo = cm.activeNetworkInfo
                return nInfo != null && nInfo.isConnected
            } catch (e: Exception) {
                e.printStackTrace()
                return false
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 2017-09-16
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2016-01-11
      • 1970-01-01
      相关资源
      最近更新 更多