強制Android使用無網路的Wifi網路
我正在構建一個需要通過無線網路進行通訊的Android應用程式.問題在於,即使WiFi連線,當WiFi網路上沒有連線網際網路時,Android會選擇使用蜂窩/移動資料.
我已經閱讀了許多關於這個問題的帖子,其中很多都涉及生根的裝置,但這是不可能的生產應用程式(生根裝置不是一個選擇).其他解決方案(像我的程式碼如下)建議使用bindProcessToNetwork(),它完美地在我的Sony Z2上工作,但不是在我測試過的其他裝置上(全部執行6.0.1)
private void bindToNetwork() { final ConnectivityManager connectivityManager = (ConnectivityManager) mActivity.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkRequest.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { builder = new NetworkRequest.Builder(); //set the transport type do WIFI builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { connectivityManager.bindProcessToNetwork(null); if (barCodeData.getSsid().contains("screenspace")) { connectivityManager.bindProcessToNetwork(network); } } else { //This method was deprecated in API level 23 ConnectivityManager.setProcessDefaultNetwork(null); if (barCodeData.getSsid().contains("screenspace")) { ConnectivityManager.setProcessDefaultNetwork(network); } } connectivityManager.unregisterNetworkCallback(this); } }); } }
您可以嘗試將全域性設定captive_portal_detection_enabled設定為0(false).
實際發生的情況是,預設情況下,每次連線到WiFi時,FW將針對伺服器(通常為谷歌)進行測試,以檢視它是否是一個強制性的WiFi(需要登入).所以如果你的wifi沒有連線到谷歌,這個檢查將失敗.之後,該裝置知道wifi沒有網際網路連線,根本不會自動連線到它.
將此設定設定為0,將避免此檢查.
程式設計方式:
Settings.Global.putInt(getContentResolver(),Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED,0);
編輯:您可能需要直接使用字串“captive_portal_detection_enabled”,而不是根據Android版本不可見的常量.
http://stackoverflow.com/questions/42492136/force-android-to-use-wifi-network-with-no-internet