0

我想在我的 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。

这种情况怎么解决??

4

8 回答 8

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);
}     
于 2012-11-05T06:37:23.620 回答
2

您好,请检查以下答案:

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

但我想建议你,建议你应该在真机而不是模拟器中测试连接代码。因为模拟器有时没有给出准确的输出。

于 2012-11-05T07:03:21.830 回答
1

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

于 2012-11-05T06:45:28.793 回答
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;

}
于 2012-11-05T06:36:42.380 回答
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;
      }

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

于 2012-11-05T06:39:10.193 回答
0

发送 HttpRequest 并检查您获得的响应代码,如果200 您已连接到互联网,否则您未连接到互联网,并且可以相应地通知用户

于 2012-11-05T06:39:41.637 回答
0

检查 Internet 连接

 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 断开和连接。我不确定。去谷歌上查询。或者,您可以使用广播接收器或服务。

于 2012-11-05T06:40:06.023 回答
0

试试这个:

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

    return (info != null);
}
于 2012-11-05T06:49:58.910 回答