0

Ricoh Theta カメラと通信するアプリがあります。カメラは WiFi ネットワークと OSC (Open Spherical Camera) Web サーバー (IP 192.168.1.1、ポート 80) を作成し、そこにデバイスを接続します。WiFiのみがオンの場合、すべてが正常に機能します。しかし、モバイルデータもオンにすると、タイムアウトエラーが発生します。

役に立つかどうかはわかりませんが、コードは次のとおりです。

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 のみを使用するように指示する方法はありますか? それとも最初?

4

1 に答える 1

1

OK、申し訳ありませんが、いくつかの調査の結果、ここで解決策を見つけました: https://code.google.com/p/android/issues/detail?id=190974

問題は、Android 6.0 の時点で、デバイスが複数のネットワークに接続されている場合、Android はインターネットにアクセスできるネットワークに接続し、他のネットワークを無視することです。丁寧に言うと、かなり奇妙に思えますが、それでも...

これを機能させるために追加したコードは次のとおりです。

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;
        }
    }
}
于 2016-09-21T08:46:51.967 に答える