问题
I have an app which connects to a hardware device Wi-Fi hotspot. It seems that Android forward requests over other networks (3G/4G for example) instead the hotspot, since my hot spot has no internet connection.
Is there any way to force network stream to work on the wifi? I've come across the following function, but it's deprecated: https://developer.android.com/reference/android/net/ConnectivityManager.html#setNetworkPreference(int)
回答1:
Per the Connecting your App to a Wi-Fi Device blog post:
To direct all the network requests from your app to an external Wi-Fi device, call ConnectivityManager#setProcessDefaultNetwork on Lollipop devices, and on Marshmallow call ConnectivityManager#bindProcessToNetwork instead, which is a direct API replacement.
回答2:
Use the ConnectivityManager to get the state of the Wifi adapter and then you can check if it is connected or even available using NetworkInfo.
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifi.isConnected()) {
// Continue with logic
}
In case he is not connected to wifi then don't proceed else continue you flow.
Add the following permission in you Manifest file
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
来源:https://stackoverflow.com/questions/39311853/android-force-network-requests-go-through-wifi-instead-of-mobile-network