有时连接不可用,但应用程序显示它存在

时间:2013-07-22 15:29:28

标签: android

我有一个使用互联网的应用程序。在发送请求之前,我使用代码检查连接:

  protected boolean isNetworkAvailable(Context context) {
    ConnectivityManager cm = 
            (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean result = false;
    if (null != activeNetwork) {
        result = activeNetwork.isAvailable() 
            && activeNetwork.isConnectedOrConnecting();
    }
    return result;
}

它运行良好但在极少数情况下,日志告诉我app无法执行请求,因为isNetworkAvailable返回false。没关系,直到用户重新确认我打开wifi并且他能够发送和接收电子邮件。那么你有什么想法可以解决这种情况吗?

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,如果我打开飞机模式,没有手机/ wifi和我运行我的应用程序它将尝试不显示我的网络连接警报,而是它尝试登录然后触发警报我的服务器无法访问。

这是原始代码:

    private void CheckNetworkState(Context context)
        {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            boolean error = true;
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

            if(activeNetwork != null)
                if(activeNetwork.isConnected()&&activeNetwork.isAvailable())
                    error = false;

            if(error)
                ShowFatalAlert(context,"Internet Connection","This application requires an active internet connection to work!");

            new CheckLogin().execute();
        }

    private void ShowFatalAlert(Context context, String title, String msg){
        AlertDialog.Builder alert = new AlertDialog.Builder(context);
        final AlertDialog ad = alert.create();
        alert.setTitle(title);
        alert.setMessage(msg);

        alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                MainActivity.this.moveTaskToBack(true);
                //android.os.Process.killProcess(android.os.Process.myPid());
            }
        });

        alert.show();
        if(ad.isShowing())
            ad.dismiss();
    }

    @Override
    public void onRestart(){
        super.onRestart();
        if(user.get(1)== "")
            CheckNetworkState(this);
    }

我遇到的问题是checklogin是一个asynctask,并没有等待我的ShowFatalAlert函数完成。 解决方案就像在else语句中移动异步执行一样简单:

        if(error)
            ShowFatalAlert(context,"Internet Connection","This application requires an active internet connection to work!");
        else            
            new CheckLogin().execute();

不确定这对您的代码有多适用,也许您发布了调用isNetworkAvailable的代码?因为我不认为你有这个功能的问题,但是你如何处理它的回归。