2015-11-26 3 views
1

Я разрабатываю приложение с Parse на Android, и мне нужно проверить подключение к Интернету на устройстве. Поэтому я сделал это для входа в систему:Проверьте данные мобильной сети, доступные в устройстве Android.

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, лучший способ использовать сетевое соединение, но я думаю, что это не решение. Как проверить мегабайты или данные на устройстве? или я должен сделать что-то другое, чтобы проверить соединение? Заранее спасибо

ответ

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; 

    } 
+0

Что означает эти параметры в getNetworkInfo? @Nigam Patro – Coeus

+0

@Coeus, что номер отличается для сетевых типов. 0 предназначен для мобильной сети, 1 для WIFI. –

+0

ОК! Я попробую с этим (: – Coeus

Смежные вопросы