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

當您調用Web服務或其他東西時,您需要連續調用此方法。 –

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

有沒有需要檢查每一次。 在清單和項目中定義Connectivity Change廣播監聽器,並在連接發生變化時檢查連接(由@Priyank Virani提供給您的代碼)

您應該處理一些特殊情況。有些時候,無線網絡連接,你連接到本地的無線網絡。在這種情況下,你需要輸入一個密碼才能使用互聯網(如圖書館,機場等),上面的代碼在互聯網連接時返回true,但實際上它是假的!您應該通過調用您提供的webService或通過調用net中着名服務的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。這個庫監聽網絡連接狀態和WiFi信號強度的變化與事件總線這也檢查是否有互聯網連接與否。

通過使用NetworkEvents,您不需要每5秒重新檢查一次Internet連接。

+0

謝謝!以及我試圖與networkEvent從我的wifi斷開互聯網,但沒有檢測到有沒有互聯網,只是當我關掉無線網絡是「OnEvent」方法被稱爲,你知道如何解決它? – Raxor

+0

您是否啓用了網絡檢查:'networkEvents = new NetworkEvents(context,busWrapper) .enableInternetCheck();'? –

+0

是的,我做了這個networkEvents = new NetworkEvents(getApplicationContext(),busWrapper).enableInternetCheck()。setPingParameters(「www.google.com」,80,3000);但有了這個告訴我,當我連接到一個無線網絡,如果有互聯網或不是,但是互聯網狀態的變化,功能不告訴我 – Raxor

0

創建於erver 5秒運行於改造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); 
    } 

} 

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類創建一個接口ServiceApi

public interface ServiceApi { 


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

} 
+0

古丁改造的一部分。代碼僅檢查連接到連接的設備,但不檢查互聯網是打開還是關閉。 –

+0

沒有得到您的情況...上面的代碼檢查是否有互聯網連接 –

+0

您可以嘗試將您的設備連接到未連接到互聯網的WiFi接入點。或嘗試使用本地網絡。 –