我有一个与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?还是先?
答案 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;
}
}
}