Android Q 10连接到网络WifiNetworkSpecifier

时间:2019-09-13 20:16:06

标签: android connection wifi wificonfiguration android-10.0

由于Android Q不允许WifiManager添加网络,因此他们建议使用WifiNetworkSpecifier。 使用WifiNetworkSuggestionBuilder,我已经能够在状态栏上显示通知,该用户可以加入网络。但是此API不能满足我的要求,因为我不需要用户使用状态栏中的建议。

使用WifiNetworkSpecifier,我还已经能够显示有关加入网络的弹出窗口,并且该应用程序还建立了与该应用程序的连接。但该wifi连接似乎仅在该应用程序范围内可用。如何克服此应用程序的范围,以便其他应用程序(例如浏览器)也能够使用此新建立的连接? 下面是我的代码

    WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();
    builder.setSsid("abcdefgh");
    builder.setWpa2Passphrase("1234567890");

    WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();
    NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder();
networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);     
networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);            
networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED);            
networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);
NetworkRequest networkRequest = networkRequestBuilder.build();
    ConnectivityManager cm = (ConnectivityManager) App.getInstance().getBaseContext().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm != null) {
        cm.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() {
            @Override
            public void onAvailable(@NonNull Network network) {
                //Use this network object to Send request.
                //eg - Using OkHttp library to create a service request

                super.onAvailable(network);
            }
        });

3 个答案:

答案 0 :(得分:3)

聚会晚了一点,但也许会帮助遇到此问题的其他人。

看来您是对的。 在android Q中,一旦应用被杀死,系统会自动断开我们通过WifiNetworkSpecifier连接的WiFi网络,并且无法阻止系统这样做。

我想出的最佳解决方案是将WifiNetworkSpecifier与WifiNetworkSuggestion结合使用。这样一来,我们可以在使用应用程序时使用WifiNetworkSpecifier,并建议一旦系统由于终止应用程序而与WiFi断开连接,系统就可以自动连接到wifi网络。

以下是一些示例代码:

    WifiNetworkSuggestion.Builder builder = new WifiNetworkSuggestion.Builder()
        .setSsid("YOUR_SSID")
        .setWpa2Passphrase("YOUR_PASSWORD")
    WifiNetworkSuggestion suggestion = builder.build();

    ArrayList<WifiNetworkSuggestion> list = new ArrayList<>();
    list.add(suggestion);

    WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    int status = manager.addNetworkSuggestions(list);

    if (status == STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
        //We have successfully added our wifi for the system to consider
    }

干杯

答案 1 :(得分:2)

我尝试了这段代码的正常工作

"C.jpeg"

答案 2 :(得分:0)

您必须添加此行才能使用互联网。 networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);