2016-09-21 40 views
0

我有一個與理光Theta相機進行通信的應用程序。相機將創建其WiFi網絡和OSC(開放式球形相機)Web服務器(IP 192.168.1.1,端口80),並在其上連接我的設備。如果只有WiFi處於開啓狀態,一切正常。但是,當我也把移動數據打開,然後我得到一個超時錯誤。如果3G/4G開啓,Android排除功能無法在本地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); 
} 

有沒有辦法告訴抽射僅使用WiFi?或者第一?

+0

您可以檢查連接類型,然後讓用戶進一步讓過程中,此鏈接可以幫助你 http://stackoverflow.com/a/8548926/5372087 –

+0

是的感謝您的評論,我找到了解決問題的方法(請參閱我的答案)。 –

回答

0

OK,對不起,一些研究後,我找到了解決辦法,在這裏:https://code.google.com/p/android/issues/detail?id=190974

的問題是,由於Android 6.0的,如果設備連接到幾個網絡,Android將連接到一個與互聯網訪問,並忽略其他(S)。似乎很奇怪,要有禮貌,但仍...

這裏是我的加入使這個工作代碼:

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; 
     } 
    } 
} 
相關問題