在6.0(S6)中开发了一个工作系统之后,我正在8.0(S9)中测试相同的代码,并且我注意到ConnectivityManager.requestNetwork()
不再做任何事情。
这是我正在使用的功能:
public static void enableWifi() {
ConnectivityManager connectivityManager = (ConnectivityManager)
mContext.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
connectivityManager.requestNetwork(
request.build(),
new ConnectivityManager.NetworkCallback() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onAvailable(Network network) {
connectivityManager.bindProcessToNetwork(network);
Log.i(TAG, "bindProcessToNetwork called");
}
},
30000
);
}
调用此函数后,我检查连接是否已切换到Wifi 20秒:
wifiManager.setWifiEnabled(true);
enableWifi();
long start_time = System.currentTimeMillis();
while (!MainActivity.getNetworkClass(mContext).contains("WIFI")) {
if (System.currentTimeMillis() - start_time > 20000) {
Log.i(TAG, "connection timed out");
}
}
超时后,我仍然在4G网络上,但从未真正启用wifi。上面显示的所有日志都被调用,但是网络状态永远不会更改为Wifi。
清单:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
编辑:
经过很多挫折后,我能够使用此设置一次建立连接,但此后再也无法建立连接。我不确定从哪里开始进行故障排除,并认为这是8.0中的错误,直到我发现其他情况为止。