0

Я хочу знать, как создать метод, который при обнаружении не имеет никакого подключения к Интернету в мобильном устройстве, а затем метод пытается подключиться к серверу каждые 5 секунд , пожалуйста, если вы можете поставить пример того, как реализовать с модифицированным, я буду ценить !, спасибо!Android Studio: создайте метод, который пытается подключиться к интернету

+0

Возможный дубликат [Как проверить интернете доступ на Android? InetAddress никогда не отключается] (http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-times-out) –

ответ

0

Возможно, этот код поможет вам.

ConnectivityManager conMgr = (ConnectivityManager) context 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 
      if (conMgr.getActiveNetworkInfo() != null 
        && conMgr.getActiveNetworkInfo().isAvailable() 
        && conMgr.getActiveNetworkInfo().isConnected()) { 
       Toast.makeText(context, "Internet Available", Toast.LENGTH_SHORT).show(); 
       return true; 
      } else { 
       if (isShowAlert) { 

        Toast.makeText(context, 
        "NOT Internet Connection", 
        Toast.LENGTH_SHORT).show(); 
       } 
       return false; 
      } 
+0

Это только проверьте, подключено ли устройство к соединение, но не проверяйте, включен ли интернет. –

+0

вам нужно вызвать этот метод, когда вы вызываете веб-службу или что-то в этом роде. –

0
public static boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) yourContext 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager 
       .getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 

Проверить

if(isNetworkAvailable()){ 
    // connected to internet 
}else{ 
    // not connected 
} 
+0

Это только проверьте, подключено ли устройство к соединению, но не проверяйте, включен ли интернет. –

0

это может быть полезно,

int intervalTime = 5000; // 5 sec 
Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
    internetConnection(); 
    } 
}, intervalTime); 


public class InternetConnection { 

    /** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */ 
    public static boolean checkConnection(Context context) { 
     final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo(); 

     if (activeNetworkInfo != null) { // connected to the internet 
      Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show(); 

      if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) { 
       // connected to wifi 
       return true; 
      } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { 
       // connected to the mobile provider's data plan 
       return true; 
      } 
     } 
     return false; 
    } 
} 
+0

Это только проверьте, подключено ли устройство к соединению, но не проверяйте, включен ли интернет. –

0

Там нет необходимости проверять каждый раз. Определите связь. Измените широковещательный прослушиватель в своем манифесте и выполните проект и проверьте соединение только после изменения подключения. Код, предоставленный вам @Priyank Virani.

Есть некоторые особые случаи, с которыми вам следует обращаться. несколько раз Wi-Fi включен, и вы подключены к локальному Wi-Fi. Вам нужно ввести пароль для использования Интернета (например, библиотеки, аэропорты и т. Д.), В этом случае приведенный выше код возвращает true, поскольку интернет подключен, но на самом деле его ложь !!!! Вы должны проверить это либо с помощью вызванного вами веб-сервиса, либо путем вызова api из известной службы в сети.

Вызов относящемся к сети вещи каждые 5 секунд, предотвратить устройство от сна и имеют очень плохое влияние на батарею устройства

0

Ранее я использую один из этих методов из How to check internet access on Android? InetAddress never times out:

public static int isInternetActiveWithPing() { 
    try { 
    Runtime runtime = Runtime.getRuntime(); 
    Process process = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); 
    int exitValue = process.waitFor(); 
    return exitValue; 
    } catch (Exception ex) { 
    return -1; 
    } 
} 

public static boolean isInternetActiveWithInetAddress() { 
    try { 
    InetAddress inetAddress = InetAddress.getByName("www.google.com"); 
    return inetAddress != null && !inetAddress.toString().equals(""); 
    } catch (Exception ex) { 
    return false; 
    } 
} 

Но это главный недостаток, который нам нужно всегда проверять, отключен ли интернет или нет.

Лучший способ - использовать NetworkEvents. Эта библиотека прослушивает состояние сетевого подключения и меняет силу сигнала Wi-Fi с помощью Event Bus, который также проверяет, есть ли подключенный Интернет или нет.

Используя NetworkEvents, вам не нужно повторно проверять подключение к Интернету каждые 5 секунд.

+0

Спасибо! хорошо я пытался с networkEvent отключить интернет от моего Wi-Fi, но не обнаружил, что нет интернета, только когда я отключу Wi-Fi, так это то, что вызывается метод OnEvent, вы знаете, как его решить? – Raxor

+0

Включили ли вы проверку через Интернет с помощью чего-то типа: 'networkEvents = new NetworkEvents (context, busWrapper) .enableInternetCheck();'? –

+0

Да, я сделал это networkEvents = new NetworkEvents (getApplicationContext(), busWrapper) .enableInternetCheck(). SetPingParameters («www.google.com», 80,3000); но с этим расскажите мне, когда я подключаюсь к Wi-Fi, если есть интернет или нет, но это изменение состояния в Интернете, functino does not tell me – Raxor

0

Создайте ручку, которая работает в ERVER 5 сек

Handler myHandler = new Handler(); 
      myRunnable = new Runnable() { 
       @Override 
       public void run() { 
        if(isNetWorkAvailable(getActivity())) 
         { 
         webService(); 
         } 

        else 
        { 
         //NO NETWORK 
        } 
       } 
      }; 
      myHandler.postDelayed(myRunnable, 5000);// runs in ever 5 sec 



    private void webservice() { 
     // create 2 getters and setters java classes ie..LoginRequest & LoginResponse 
     LoginRequest loginRequest = new LoginRequest(userEmail, userPassword); 

     final ProgressDialog progressDialog = new ProgressDialog(mContext); 
     progressDialog.setTitle("Please Wait"); 
     progressDialog.show(); 
     Call<LoginResponse> call = GApiClient.get().postWithFormParams(loginRequest); 
     call.enqueue(new Callback<LoginResponse>() { 
      @Override 
      public void onResponse(Response<LoginResponse> response) { 
       progressDialog.dismiss(); 
       Log.i("Response ", "Present"); 

      } 

      @Override 
      public void onFailure(Throwable t) { 
       progressDialog.dismiss(); 
        RetrofitError retrofitError; 
        if (e instanceof RetrofitError) { 
        retrofitError = ((RetrofitError) e); 
        if (retrofitError.getKind() == RetrofitError.Kind.NETWORK) { 
         return "Network is down!"; 
         } 
    } 
       Log.i("Response ", " error"); 
      } 
     }); 


    } 




    public static int getConnectivityStatus(Context context) { 
      ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
      if (null != activeNetwork) { 
       return TYPE_WIFI; 
      } 
      return TYPE_NOT_CONNECTED; 
     } 


     public static boolean isNetWorkAvailable(Context context) { 
      int status = getConnectivityStatus(context); 
      if (status != 0) { 
       return true; 
      } else { 
       return false; 
      } 
     } 

класс Apiclient для дооснащения 2,2

public class GApiClient { 
    private static GServiceApi REST_CLIENT; 


    public static final String API_URL = "YOUR BASE URL"; 
    static { 
     setupRestClient(); 
    } 


    private ApiClient() { 

    } 

    public static ServiceApi get() { 
     return REST_CLIENT; 
    } 

    private static void setupRestClient() { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(API_URL_TEST) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     REST_CLIENT = retrofit.create(GServiceApi.class); 
    } 

} 

Создание интерфейса ServiceApi

public interface ServiceApi { 


    @POST("/verify/json") //rest of url 
    Call<Employee> postWithFormParams(@Body UserDetails data); 

} 
+0

Гудин модифицировать часть. Код только проверяет, подключено ли устройство к соединению, но не проверяйте, включен ли интернет. –

+0

не получает сценарий ур ... выше кода проверяет наличие интернет-соединения –

+0

Вы можете попробовать подключить свое устройство к точке доступа WiFi, которая не подключена к Интернету. Или попробуйте использовать локальную сеть. –