Emi*_*oni 5 android android-wifi
我正在尝试实现文档中描述的 WiFi 对等网络:
https://developer.android.com/guide/topics/connectivity/wifi-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);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这确实按预期工作,它确实向用户显示了可用网络的对话框,用户可以选择它,然后我得到一个回调,并根据需要访问网络。一旦我的前台服务停止,WiFi 连接就会被断开,这正是它所需要的。
但是,下次当我尝试连接时,我会收到相同的窗口,要求用户选择网络,但基于此处的文档:https : //developer.android.com/guide/topics/connectivity/wifi-bootstrap#绕过批准只要我在连接到网络时没有忘记网络并且没有使用 BSSID 或 SSID 模式,就应该记住这一点,并且应该绕过用户批准。我缺少什么,为什么我一直在获得用户批准窗口?
我认为它可能仅限于活动/服务,但即使我从活动中调用它,我也会遇到相同的行为。
发现问题了,问题。可能是我的英语或者可能是不明显的文档。
如果应用程序发出非特定请求(例如使用 SSID 或 BSSID 模式),则用户必须批准该请求。
这意味着必须同时设置 SSID 和 BSSID。不设置 BSSID 相当于设置 BSSID 模式。当我记录 NetworkRequest 构建器时我意识到了这一点。为了让应用程序自动再次连接到网络,您还需要设置 SSID 和 BSSID 值。
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |