如何确定android中的网络不可用性

时间:2012-11-05 06:34:04

标签: android android-wifi android-networking android-internet

我想在我的Android应用程序中显示连接不可用的警告。

我在我的应用程序中调用了一些休息请求。要检查此网络不可用情况,我手动断开我的笔记本电脑中的wifi(我在模拟器中测试)。

我称之为服务的代码在这里

resp = client.execute(httpPostRequest);

在这里,我正在捕捉异常

catch (IllegalStateException e) {
            //assertTrue(e.getLocalizedMessage(), false);
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            //assertTrue(e.getLocalizedMessage(), false);
            e.printStackTrace();
        } catch (IOException e) {
            //assertTrue(e.getLocalizedMessage(), false);
            e.printStackTrace();
        }

当我得到异常时,我尝试获取设备网络连接的状态 这个功能

public boolean IsInternetConnectted()
    {
        ConnectivityManager conMgr =  (ConnectivityManager)this.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo i = conMgr.getActiveNetworkInfo();
        conMgr = null;
        if (i == null)
            return false;
        if (!i.isConnected())
            return false;
        if (!i.isAvailable())
            return false;
        return true;        
    }

即使wi-fi断开连接,我的模拟器也会从此函数返回true。

如何解决这种情况?

8 个答案:

答案 0 :(得分:4)

使用此代码段:

 // added as an instance method to an Activity
boolean isNetworkConnectionAvailable() {  
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();     
    if (info == null) return false;
    State network = info.getState();
    return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING);
}     

答案 1 :(得分:2)

您好请检查以下答案:

http://stackoverflow.com/questions/13217676/how-to-check-the-real-internet-connected-in-android/13217956#13217956

但我想建议您建议您在真实设备而不是模拟器中测试连接代码。因为模拟器有时候没有给出准确的输出。

答案 2 :(得分:1)

我在我的模拟器中发现了同样的错误...... 但是在移动设备上试试你的代码这段代码运行完美,并且在真实设备中没有出现任何错误...

答案 3 :(得分:0)

试试这个

public static Boolean checknetwork(Context mContext) {

    NetworkInfo info = ((ConnectivityManager) mContext
            .getSystemService(Context.CONNECTIVITY_SERVICE))
            .getActiveNetworkInfo();
    if (info == null || !info.isConnected()) 
    {

        return false;
    }
    if (info.isRoaming()) {
        // here is the roaming option you can change it if you want to
        // disable internet while roaming, just return false
        return true;
    }

    return true;

}

答案 4 :(得分:0)

试试这个:

public static boolean isOnline(Context context) {
        boolean state=false;
        ConnectivityManager cm = (ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE);


        NetworkInfo wifiNetwork =
            cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if (wifiNetwork != null) {
            state=wifiNetwork.isConnectedOrConnecting();
             }

            NetworkInfo mobileNetwork =
            cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if (mobileNetwork != null) {
            state=mobileNetwork.isConnectedOrConnecting();
            }

            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null) {
            state=activeNetwork.isConnectedOrConnecting();

            }

            return state;
      }

为了获得更好的结果,请检查真实设备..

答案 5 :(得分:0)

发送Http请求,然后检查您获得的200是否已连接到互联网的其他响应代码,否则您可以相应地通知用户

答案 6 :(得分:0)

检查互联网连接

 public class CheckNetwork {


private static final String TAG = CheckNetwork.class.getSimpleName();



public static boolean isInternetAvailable(Context context)
{
    NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
    context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

    if (info == null)
    {
         Log.d(TAG,"no internet connection");
         //Toast.makeText(context, "No Internet Connection", 1000);
         return false;
    }
    else
    {
        if(info.isConnected())
        {
            Log.d(TAG," internet connection available...");
            return true;
        }
        else
        {
            Log.d(TAG," internet connection");
            return true;
        }

    }
}
 }

在您的活动类

        if(CheckNetwork.isInternetAvailable(YourActivity.this))
             {
               //your studd
             }

使用f7断开连接并在仿真器中连接。我不确定。谷歌一下。 或者,您可以使用广播接收器或服务。

答案 7 :(得分:0)

试试这个:

public static boolean isNetworkAvailable(Context context)
{
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cm.getActiveNetworkInfo();

    return (info != null);
}