gpt4 book ai didi

android - 在调用 BindProcessToNetwork(network) 之后。 APP从不通过移动数据连接互联网

转载 作者:行者123 更新时间:2023-12-04 08:33:34 27 4
gpt4 key购买 nike

我的 APP 使用 WifiNetworkSpecifier 连接到路由器。
一旦连接到路由器。 APP调用

connection_manager.BindProcessToNetwork(network);


调用此函数后。即使我关闭了WiFi。并打开移动数据。
APP将无法连接到互联网了。
如果这个函数没有被调用。 APP将能够通过移动数据连接到互联网。
BindProcessToNetwork() 的机制是什么?
这是我的代码。 (引用 ref 1 ref 2 )
private void RequestNetwork()
{
var specifier = new WifiNetworkSpecifier.Builder()
.SetSsid(_ssid.Text)
.SetWpa2Passphrase(_passphrase.Text)
.Build();

var request = new NetworkRequest.Builder()
.AddTransportType(TransportType.Wifi)
.RemoveCapability(NetCapability.Internet)
.SetNetworkSpecifier(specifier)
.Build();

var connectivityManager = GetSystemService(ConnectivityService) as ConnectivityManager;

if (_requested)
{
connectivityManager.UnregisterNetworkCallback(_callback);
}

connectivityManager.RequestNetwork(request, _callback);


_requested = true;
}

private class NetworkCallback : ConnectivityManager.NetworkCallback
{
public Action<Network> NetworkAvailable { get; set; }
public Action NetworkUnavailable { get; set; }

public static Context _context = Android.App.Application.Context;

ConnectivityManager connection_manager = (ConnectivityManager)_context.GetSystemService(Context.ConnectivityService);
public override void OnAvailable(Network network)
{
base.OnAvailable(network);
NetworkAvailable?.Invoke(network);
connection_manager.BindProcessToNetwork(network);

}

public override void OnUnavailable()
{
base.OnUnavailable();
NetworkUnavailable?.Invoke();
}
}

最佳答案

一次BindProcessToNetwork调用时,所有网络套接字在该应用程序的生命周期内都绑定(bind)到该网络(这主要是一项安全功能,因此数据包不会“泄漏”另一个网络)。
您可以通过调用 BindProcessToNetwork 清除该网络绑定(bind)。再次,但传入 null作为您的网络类型。

connection_manager.BindProcessToNetwork(null);

关于android - 在调用 BindProcessToNetwork(network) 之后。 APP从不通过移动数据连接互联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64913185/

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