如果3G / 4G开启,Android排球对本地WiFi不起作用

时间:2016-09-21 08:32:28

标签: android wifi android-volley 3g 4g

我有一个与Ricoh Theta相机通信的应用程序。相机创建了WiFi网络和OSC(开放式球形摄像机)Web服务器(IP 192.168.1.1,端口80),我在其上连接了我的设备。如果只有WiFi打开,一切正常。但是,当我也将移动数据设置为ON时,我会收到超时错误。

不确定它是否有用,但这里有一些代码:

protected void executePost(String request, final String body, final RequestListener listener) {

    StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://" + mIpAddress + ":" + mPort + request,

            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    if(listener != null) {
                        handleResponse(response, listener);
                    }
                }
            },

            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    if(listener != null) {
                        listener.onError(error);
                    }
                }
            }
    )
    {
        @Override
        public byte[] getBody() throws AuthFailureError {

            return body == null ? null : body.getBytes();
        }
    };

    int socketTimeout = 30000;
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    stringRequest.setRetryPolicy(policy);

    stringRequest.setTag(REQUEST_TAG);
    mRequestQueue.add(stringRequest);
}

有没有办法告诉Volley只使用WiFi?还是先?

1 个答案:

答案 0 :(得分:1)

好的,对不起,经过一些研究我找到了解决方案,在这里:https://code.google.com/p/android/issues/detail?id=190974

问题是,从Android 6.0开始,如果设备连接到多个网络,Android将连接到具有Internet访问权限的设备,并忽略其他网络。看起来很奇怪,有礼貌,但仍然......

以下是为使其正常工作而添加的代码:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {

    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    for (Network net : connectivityManager.getAllNetworks()) {

        NetworkInfo networkInfo = connectivityManager.getNetworkInfo(net);

        if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
            connectivityManager.bindProcessToNetwork(net);
            break;
        }
    }
}