WifiNetworkSpecifier绕过用户选择。

问题描述 投票:1回答:1

我想按照文档中的描述实现一个WiFi点对点网络。

https:/developer.android.comguidetopicsconnectivitywifi-bootstrap。

我这样做是为了让应用程序面向未来,旧版本的应用程序只是简单地添加了一个Wifinetwork,没有任何大的问题,但现在正在被废弃,所以我试图使用新的方法来运行Android 10的设备。

这是我的代码(从前台服务调用)。

 if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {
            WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder();

            builder.setBssid(MacAddress.fromString("00:08:22:C0:9F:4A"));
            builder.setWpa2Passphrase("password");

            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();
            final ConnectivityManager cm = (ConnectivityManager) 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
                        InetAddress server = cm.getLinkProperties(network).getDnsServers().get(0);
                        Log.d(TAG,"Got the following address: "+server.getHostAddress());



                        super.onAvailable(network);
                    }
                });

            }
        }

这确实如我所料,它确实向用户显示了一个对话框,里面有可用的网络,用户可以选择它,然后我得到一个回调,并根据我的需要访问网络。

然而下一次当我试图连接时,我得到了同样的窗口,要求用户选择网络,但根据这里的文档。https:/developer.android.comguidetopicsconnectivitywifi-bootstrap#bypass-approval。 只要我在连接网络时没有忘记网络,也没有使用BSSID或SSID的模式,就应该记住这一点,并且绕过用户批准。

我想这可能是限于ActivityService的问题,但是即使我从一个Activity中调用它,我也会遇到同样的行为。

android android-wifi
1个回答
1
投票

找到问题了,问题。可能是我英语不好,也可能是文档不明显。

如果应用提出一个非特定的请求,比如用SSID或BSSID模式,那么用户必须批准这个请求。

这意味着SSID和BSSID都必须设置。不设置BSSID就相当于设置了BSSID模式。当我登录NetworkRequest构建器时才意识到这一点.为了让应用程序再次自动连接到网络,你需要同时设置SSID和BSSID两个值。

© www.soinside.com 2019 - 2024. All rights reserved.