如果您的应用程序使用了Webview来加载URL,同时出现“ERR_CLEARTEXT_NOT_PERMITTED”错误或无法加载URL的问题,那么您的应用程序可能是由于私有DNS而出现的问题。为了解决这个问题,您可以尝试在您的应用程序中添加以下代码:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
// Set private DNS for devices running Android 9 or higher
final String PRIVATE_DNS_MODE_OFF = "off";
final String PRIVATE_DNS_MODE_OPPORTUNISTIC = "opportunistic";
final String PRIVATE_DNS_MODE_STRICT = "strict";
final String PRIVATE_DNS_KEY = "private_dns_mode";
final String PRIVATE_DNS_MODE_PROVIDERS = "private_dns_providers";
final String PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = "private_dns_provider_hostname";
final String PRIVATE_DNS_DEFAULT_MODE = PRIVATE_DNS_MODE_STRICT;
final String PRIVATE_DNS_CLOUDFLARE_PROVIDER_HOSTNAME = "1dot1dot1dot1.cloudflare-dns.com";
final String[] PRIVATE_DNS_MODES = new String[]{PRIVATE_DNS_MODE_OFF, PRIVATE_DNS_MODE_OPPORTUNISTIC, PRIVATE_DNS_MODE_STRICT};
// Set DNS mode to strict
SystemProperty.set(PRIVATE_DNS_KEY, PRIVATE_DNS_MODE_STRICT);
// Set DNS provider
final Bundle bundle = new Bundle();
bundle.putString(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME, PRIVATE_DNS_CLOUDFLARE_PROVIDER_HOSTNAME);
final String[] providers = new String[]{PRIVATE_DNS_CLOUDFLARE_PROVIDER_HOSTNAME};
bundle.putStringArray(PRIVATE_DNS_MODE_PROVIDERS, providers);
webView.getWebView().getSettings().setPrivateBrowsingEnabled(true);
webView.getWebView().getSettings().setPrivateDnsEnabled(true);
webView.getWebView().getSettings().setUseWideViewPort(true);
webview.getSettings().setLoadWithOverviewMode(true);
}
以上代码将启用私有DNS,并将其设置为“严格”模式,并将DNS提供程序设置为Cloudflare。您可以根据您自己的需要轻松更改它。