gpt4 book ai didi

android - WifiNetworkSpecifier 绕过用户选择

转载 作者:行者123 更新时间:2023-12-03 17:00:05 27 4
gpt4 key购买 nike

我正在尝试按照文档中的描述实现 WiFi 对等网络:

https://developer.android.com/guide/topics/connectivity/wifi-bootstrap

我这样做是为了让应用程序面向 future ,旧版本的应用程序只是简单地添加了一个 Wifi 网络,但现在已被弃用,所以我正在尝试将新方法用于运行 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);
}
});

}
}

这确实按预期工作,它确实向用户显示了一个可用网络的对话框,用户可以选择它,然后我得到一个回调,并根据需要访问网络。
一旦我的前台服务停止,WiFi 连接就会被断开,这正是它所需要的。

但是,当我下次尝试连接时,我会得到相同的窗口,要求用户选择网络,但基于此处的文档: https://developer.android.com/guide/topics/connectivity/wifi-bootstrap#bypass-approval只要我在连接网络时没有忘记网络并且没有使用 BSSID 或 SSID 的模式,就应该记住这一点,并且应该绕过用户批准。
我错过了什么,为什么我不断获得用户批准窗口?

我认为它可能仅限于 Activity/服务,但即使我从 Activity 中调用它,我也会遇到相同的行为。

最佳答案

发现问题,问题。可能是我的英语,也可能是不明显的文档。

If the app makes a non-specific request, such as with an SSID or BSSID pattern, then the user must approve the request.



这意味着必须同时设置 SSID 和 BSSID。不设置 BSSID 等同于设置 BSSID 模式。当我登录 NetworkRequest 构建器时,我意识到了这一点。
为了让应用程序自动重新连接到网络,您还需要设置值 SSID 和 BSSID。

关于android - WifiNetworkSpecifier 绕过用户选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62087396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com