检查互联网数据是不是接收(Android)[重复]

Posted

技术标签:

【中文标题】检查互联网数据是不是接收(Android)[重复]【英文标题】:Checking internet data receiving or not (Android) [duplicate]检查互联网数据是否接收(Android)[重复] 【发布时间】:2015-12-25 10:39:01 【问题描述】:

我正在使用以下代码检查互联网连接是否可用,如果手机禁用 wifi 或数据,此代码运行良好,但问题是当互联网连接期间未接收数据时此代码挂起手机....

public class ConnectionDetector 

private Context _context;

public ConnectionDetector(Context context)
    this._context = context;


public boolean isConnectingToInternet()
    ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
      if (connectivity != null) 
      
          NetworkInfo[] info = connectivity.getAllNetworkInfo();
          if (info != null) 
              for (int i = 0; i < info.length; i++) 
                  if (info[i].getState() == NetworkInfo.State.CONNECTED)
                  
                      return true;
                  

      
      return false;

【问题讨论】:

【参考方案1】:
  <!--Constants.INTERNET_CONNECTION_URL="YOUR_WEB_SERVICE_URL/URL OF GOOGLE";-->

    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;

    import com.vgheater.util.Constants;

    import java.io.IOException;
    import java.net.HttpURLConnection;
    import java.net.URL;

    public class CheckConnectivity 
        private Context _context;

        public CheckConnectivity(Context context) 
            this._context = context;
        

        public boolean isConnectingToInternet() 
            ConnectivityManager connectivity = (ConnectivityManager) _context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) 
                NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null)
                    for (int i = 0; i < info.length; i++)
                        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
                            return true;
                        

            
            return false;
        

        public boolean hasActiveInternetConnection() 
            if (isConnectingToInternet()) 
                try 
                    HttpURLConnection urlc = (HttpURLConnection) (new URL(Constants.INTERNET_CONNECTION_URL).openConnection());
                    urlc.setRequestProperty("User-Agent", "Test");
                    urlc.setRequestProperty("Connection", "close");
                    urlc.setConnectTimeout(5000);
                    urlc.connect();
                    return (urlc.getResponseCode() == 200);
                 catch (IOException e) 
                    return false;
                
             else 
                return false;
            
        
    

可以如下使用..

private class InternetTask extends AsyncTask<String, Void, Boolean> 

      private ProgressDialog internetDialog = null;

        @Override
        protected void onPreExecute() 
            super.onPreExecute();
            internetDialog = new ProgressDialog(RegisterUser.this);
            internetDialog.setCancelable(false);
            internetDialog.setCanceledOnTouchOutside(false);
            internetDialog.setMessage(html.fromHtml("<font  color='#616161'>Checking Internet Connectivity.</font>"));
            internetDialog.show();
        

        protected Boolean doInBackground(String... urls) 
            boolean response = false;
            try 
                response = checkConnectivity.hasActiveInternetConnection();
             catch (Exception e) 
                e.printStackTrace();
            
            return response;
        

        protected void onPostExecute(Boolean result) 
            internetDialog.dismiss();
            if (result) 
                //do stuff
             else 
                new ShowToast(RegisterUser.this, "Connect to Internet & Try Again !!");


            
        

    

【讨论】:

你的意思是在 hasActiveInternetConnection() 中返回两个语句 false ????? 如果您有来自return (urlc.getResponseCode() == 200);的互联网连接,它将返回true 您没有正确理解我的问题,我想检查是否在连接的 Internet 状态下数据正在接收......当我点击发布时,您的代码我的应用程序卡在按钮上数据 在后台线程中尝试...如果您连接到互联网,它将尝试使用 HttpURLConnection 与指定的 URL 进行通信,如果它不会从特定的响应中得到任何响应,它将返回 false 即,你没有收到的数据.. 对不起先生,但是当数据没有接收到时,这种方法需要太多时间..我想快速检查是否接收到互联网数据

以上是关于检查互联网数据是不是接收(Android)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]

如何在android中检查网络是不是连接到wifi [重复]

在整个应用程序中检查 android studio 中的互联网连接。 (我们是不是需要在每个 java 活动中编写连接管理器函数?) [重复]

在具有互联网数据速度的android中检查网络可用[重复]

Android Firebase实时数据库互联网连接[重复]

检查互联网连接Android [重复]