Android网络连接测试

4
我有以下代码,它会在调用AsyncTask方法“Task”之前检查是否有互联网连接,然后从互联网获取信息。只有当手机处于飞行模式或未连接到外部无线互联网(即没有使用手机计划内置的互联网)时,它才能正常工作。
如果手机连接到外部无线调制解调器但该调制解调器未连接到互联网,则会强制关闭!
 if (isOnline()) {
    new Task().execute();
 } else {
     Toast.makeText(this, "There seems to be no internet access, please try again later!", Toast.LENGTH_LONG).show();
 }

并且
 public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
        return false;
 }

有没有什么“行之有效”的方法来解决这个问题?

谢谢,

迈克。

4个回答

8

我通常在 If 语句 中检查一个额外的条件。

 netInfo .isAvailable()

我认为这是唯一的方法,我们可以知道互联网是否可用。


4

请检查此代码片段

try {

    ConnectivityManager nInfo = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    nInfo.getActiveNetworkInfo().isConnectedOrConnecting();

    Log.d(tag, "Net avail:"
            + nInfo.getActiveNetworkInfo().isConnectedOrConnecting());

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        Log.d(tag, "Network available");
        return true;
    } else {
        Log.d(tag, "Network not available");
        return false;
    }

} catch (Exception e) {
    return false;
}

请确保您已在 android-manifest.xml 文件中正确写入以下权限细节:

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

查看以下问题以获取更多细节:Android网络连接


0


不,它不是那样的,它可以在每种模式下正常工作。我自己尝试过使用它

public boolean isOnline() {
    boolean flag = false;
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm.getActiveNetworkInfo() != null) {
        flag = cm.getActiveNetworkInfo().isConnectedOrConnecting();
    }
    return flag;
}

0

看看这个:

ConnectivityManager cm,cm1;




private static boolean isConnected(Context context) {

        NetworkInfo networkInfo = null;

        if (cm != null) {
            networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        }
        return networkInfo == null ? false : networkInfo.isConnected();
    }

    private static boolean isConnected1(Context context) {

        NetworkInfo networkInfo1 = null;

        if (cm1 != null) {

            networkInfo1 = cm1.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        }
        return networkInfo1 == null ? false : networkInfo1.isConnected();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接