gpt4 book ai didi

android - 强制WebView在某个网络上运行

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:20 26 4
gpt4 key购买 nike

是否可以强制 WebView通过指定的 Network 加载 URL ?

我的设备打开了两个网络连接:wifi 和移动数据。移动数据网络设置为传出连接的默认网络(因此连接管理器返回 connectivityManager.getActiveNetwork() 的移动数据网络)。

我尝试加载的网页(来自 http://10.0.0.1:80)正在通过 wifi 连接的网络服务器上运行。因此, WebView 无法加载到页面,因为它无法通过移动数据访问。

最佳答案

所以我自己在这个话题上多挖了一点,发现了一些有用的信息:

有了这些知识,我终于找到了可行的解决方案:

ConnectionFragment.java

public class ConnectionFragment extends Fragment {

private static final String TAG = ConnectionFragment.class.getSimpleName();

private final NetworkCallback networkCallback = new NetworkCallback();
private ConnectivityManager connectivityManager;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
Log.v(TAG, "onCreate");
super.onCreate(savedInstanceState);

connectivityManager = (ConnectivityManager) getActivity().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
}

@Override
public void onStart() {
Log.v(TAG, "onStart");
super.onStart();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
registerNetworkCallback();
}
}

@Override
public void onStop() {
Log.v(TAG, "onStop");
super.onStop();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
unregisterNetworkCallback();
}
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void registerNetworkCallback() {
Log.v(TAG, "registerNetworkCallback");

final NetworkRequest networkRequest = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.build();

connectivityManager.registerNetworkCallback(networkRequest, networkCallback);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void unregisterNetworkCallback() {
Log.v(TAG, "unregisterNetworkCallback");
connectivityManager.unregisterNetworkCallback(networkCallback);
}

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private class NetworkCallback extends ConnectivityManager.NetworkCallback {

@Override
public void onAvailable(Network network) {
Log.v(TAG, "onAvailable");
bindProcessToNetwork(network);
}

@Override
public void onLost(Network network) {
Log.v(TAG, "onLost");
bindProcessToNetwork(null);
}

private void bindProcessToNetwork(final Network network) {
Log.v(TAG, "bindProcessToNetwork: " + network);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connectivityManager.bindProcessToNetwork(network);
} else {
ConnectivityManager.setProcessDefaultNetwork(network);
}
}

}

}

我希望这会对某人有所帮助。

但请记住:对于依赖于另一个网络的所有其他连接,您需要手动配置套接字。

最好的问候,
温克勒尔

关于android - 强制WebView在某个网络上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46243435/

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