ConnectivityManager无法在Oreo中请求Network / bindProcessToNetwork

时间:2018-11-06 16:11:05

标签: java android wifi

在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中的错误,直到我发现其他情况为止。

0 个答案:

没有答案