簡體   English   中英

為什么連接管理器不能在棒棒糖之前的設備上運行?

[英]Why connectivity manager doesn't work on pre-lollipop devices?

我在助手類中實現了一個功能。

public class helpers {

    ////////////////////////////////////////////////////////////
    //================== method for checking internet connection  ===========
    ////////////////////////////////////////////////////////////

    public static  boolean isOnline(Context context) {
        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting()) {
            return true;
        }
        return false;
    }
}

並且在其他類中使用此方法需要先建立Internet連接,然后再用volley發送json請求。 現在我的問題是,為什么此功能在棒棒糖設備中起作用而在棒棒糖之前的設備中不起作用。

例如參見以下代碼:

private void sendJsonReq() {

        if (helpers.isOnline(DarsActivity.this)) {
            //creating volley object request
            JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, darsUrl, null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    if (response != null || response.length() > 0) {
                       //doing network stuff
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    prgLoading.setVisibility(View.GONE);
                    Toast.makeText(DarsActivity.this, "خطا در دریافت اطلاعات ", Toast.LENGTH_SHORT).show();
                }
            });
            AppController.getInstance().addToRequestQueue(request);

            // LOAD MORE FUNCTION =====================================================================

            recyclerView.addOnScrollListener(new EndlessRecyclerViewScrollListener(gridLayoutManager) {
                @Override
                public void onLoadMore(int page, int totalItemsCount) {
                    if (!after_url.equals("null")) {
                        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, after_url, null, new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                               //doing network stuff
                            }
                        }, new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {

                                prgLoading.setVisibility(View.GONE);
                                errorLayout.setVisibility(View.VISIBLE);
                                txtErrorMessage.setText("دریافت اطلاعات با مشکل مواجه شد دوباره امتحان کنید !");
                                btnErrorRefresh.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        if (helpers.isOnline(DarsActivity.this)) {
                                            prgLoading.setVisibility(View.VISIBLE);
                                            errorLayout.setVisibility(View.GONE);
                                            sendJsonReq();
                                        } else {
                                            errorLayout.setVisibility(View.VISIBLE);
                                            prgLoading.setVisibility(View.GONE);
                                            txtErrorMessage.setText("شما به اینترنت متصل نیستید . دوباره امتحان کنید !");
                                            btnErrorRefresh.setOnClickListener(new View.OnClickListener() {
                                                @Override
                                                public void onClick(View v) {
                                                    if (helpers.isOnline(DarsActivity.this)) {
                                                        errorLayout.setVisibility(View.GONE);
                                                        prgLoading.setVisibility(View.VISIBLE);
                                                        sendJsonReq();
                                                    }
                                                }
                                            });
                                        }
                                    }
                                });

                            }
                        });
                        AppController.getInstance().addToRequestQueue(request);

                    }
                }
            });
        } else {
            errorLayout.setVisibility(View.VISIBLE);
            btnErrorRefresh.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (helpers.isOnline(DarsActivity.this)) {
                        errorLayout.setVisibility(View.GONE);
                        prgLoading.setVisibility(View.VISIBLE);
                        sendJsonReq();
                    }
                }
            });
        }
    }

當我在棒棒糖設備上運行此代碼時,錯誤處理工作完美,但是當我在棒棒糖之前的設備上運行此代碼時,它將跳過isOnline方法並發送json請求。

編輯:

跟蹤代碼后,我在棒棒糖之前的設備中獲得isOnline方法,返回true 但為什么?!

嘗試一下,效果很好:

 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 static boolean isConnected(Context context) {
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null) {
        NetworkInfo info = connectivity.getActiveNetworkInfo();
        if (info != null) {

            if (info.getType() == ConnectivityManager.TYPE_WIFI || info.getType() == ConnectivityManager.TYPE_MOBILE || info.getType() == ConnectivityManager.TYPE_ETHERNET) {
                return true;
            }
        }
    }
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM