【问题标题】:Check mobile network data available in the android device检查 android 设备中可用的移动网络数据
【发布时间】:2016-02-29 21:48:20
【问题描述】:

我在 Android 中使用 Parse 开发应用,我需要检查设备上的互联网连接。所以我这样做是为了登录:

connectivityManager = (ConnectivityManager)getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
    networkInfo = connectivityManager.getActiveNetworkInfo();

btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (networkInfo != null && networkInfo.isConnected()) {
                if (validate()) {
                    ParseUser.logInInBackground(user, password, new LogInCallback() {
                        @Override
                        public void done(ParseUser user, ParseException e) {
                            if (user != null) {
                                //code to send to MainActivity
                            } else {
                                //code if the values are wrong
                            }
                        }
                    });
                }
            }else {
                Toast.makeText(getActivity(), "Check your network connection", Toast.LENGTH_LONG).show();
            }
        }
    });

我的问题来了。在我的国家,我们的手机提供商免费为我们提供 whatsapp 和 facebook,但如果您尝试使用您的移动数据浏览或使用其他应用程序,则不允许这样做。当我尝试在没有任何移动数据的情况下登录我的应用程序时,我不知道如何,该应用程序检测到一些移动数据并尝试登录。我在这里阅读 SO,使用网络连接的最佳方式,但我认为这些不是解决方案。如何查看设备中的兆字节或数据?还是我应该做一些不同的事情来检查连接?提前致谢

【问题讨论】:

    标签: android parse-platform network-connection


    【解决方案1】:

    http://clients3.google.com/generate_204 用于检查连接。

    import java.net.HttpURLConnection;
    import java.net.URL;
    
    
    ...
    private int inter = 0;   
    
    ...
    
    
    
    class checkconne extends AsyncTask<String, String, String> {
    
                            @Override
                            protected void onPreExecute() {
                                super.onPreExecute();
    
    
    
                            }
                            @Override
                            protected String doInBackground(String... args) {
    
                                int kk=0;
                                try {
                                    HttpURLConnection urlc = (HttpURLConnection)
                                            (new URL("http://clients3.google.com/generate_204")
                                                    .openConnection());
                                    urlc.setRequestProperty("User-Agent", "Android");
                                    urlc.setRequestProperty("Connection", "close");
                                    urlc.setConnectTimeout(1500);
                                    urlc.connect();
                                    kk= urlc.getResponseCode();
                                } catch (IOException e) {
    
    
        Log.e("qweqwe", "Error checking internet connection", e);
                            }
    
                            inter=kk;
    
    
    
                            return null;
                        }
                        @Override
                        protected void onPostExecute(String file_url) {
    
    
                            if (inter == 204){       
             Toast.makeText(MainActivity3.this, "is connected", Toast.LENGTH_LONG).show();             
    
                            }else{    
    
    
                                Toast.makeText(MainActivity3.this, "No connection", Toast.LENGTH_LONG).show();
    
                            }
    
    
                        }
                    }
    

    【讨论】:

      【解决方案2】:

      尝试使用此解决方案可能会有所帮助。

      public boolean isNetworkOnline() {
          boolean status=false;
          try{
              ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
              NetworkInfo netInfo = cm.getNetworkInfo(0);
              if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
                  status= true;
              }else {
                  netInfo = cm.getNetworkInfo(1);
                  if(netInfo!=null && netInfo.getState()==NetworkInfo.State.CONNECTED)
                      status= true;
              }
          }catch(Exception e){
              e.printStackTrace();  
              return false;
          }
          return status;
      
          }  
      

      【讨论】:

      • getNetworkInfo 中的这些参数是什么意思? @尼加姆帕特罗
      • @Coeus 网络类型的数字不同。0 用于移动网络,1 用于 WIFI。
      • @Coeus 试试这个并告诉我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 2018-12-15
      • 2020-08-14
      • 1970-01-01
      相关资源
      最近更新 更多