WebView可以很好地处理http请求和https(其中知名的可信站点如https://www.online.citibank.co.in/),但我试图使用第三方颁发的CA访问私有站点,它显示的是空白屏幕。证书通过SD卡安装到电话上,并列在受信任的证书列表下。
当我在将证书添加到TrustManager后使用HttpsURLConnection尝试相同的URL时,它工作得很好(能够获取内容)。
下面是WebView和HttpSurlConnection的代码片段。
try
{
SSLContext context = null;
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = getResources().openRawResource(R.raw.mi_net);
Certificate ca;
try {
ca = cf.generateCertificate(caInput);
} finally {
caInput.close();
}
// Create a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
// Create a TrustManager that trusts the CAs in our KeyStore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
// Create an SSLContext that uses our TrustManager
context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
url = new URL(urlStr);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(context.getSocketFactory());
con.setInstanceFollowRedirects(true);
con.setDoOutput(false);
con.setConnectTimeout(1000);
String responseMsg = con.getResponseMessage();
response = con.getResponseCode();
is = con.getInputStream();
}
{
WebSettings viewSettings = webView.getSettings();
viewSettings.setJavaScriptEnabled(true);
viewSettings.setAllowContentAccess(true);
viewSettings.setBuiltInZoomControls(false);
webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.loadUrl(sameURL);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(final WebView view, final String url, Bitmap favicon) {
Log.d("ann", "onPageStarted");
}
@Override
public void onPageFinished(final WebView view, String url) {
Log.d("ann", "inside onPageFinished");
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
if (!failingUrl.startsWith("mailto:")) {
webView.loadUrl("file:///android_asset/html/error.html");
}
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
super.onReceivedSslError(view, handler, error);
Log.d("ann","SSL error");
handler.proceed();
}
});}
}
如果有帮助的话,我想要的与本谷歌教程中所做的类似 我不应该这样做吗? 替换碎片时的空白屏幕
我在主活动中有以下代码 可扩展置标语言 有时当我打开我的应用程序时,只会显示白屏。我已经使用AsyncTask将数据库从资产文件夹复制到设备,共享首选项将设置字体类型和大小。谁能帮我解决这个问题。谢谢你。 在提出问题之前,我已经阅读了以下问题 Android应用程序启动时的白色背景 android闪屏前几秒钟的白色背景 闪屏活动背景色
问题内容: 我正在使用cdh5 quickstart vm,并且我有一个像这样的文件(此处不完整): 我使用了这个脚本: 该脚本有效,但是生成的文件为空,您有什么想法吗? 问题答案: 最后,只有此模式有效:如果我添加或删除与该配置不同的空格,那么我将出现错误(我还为元组添加了“名称”,并在其为空时指定了“ null”,并更改了作者之间的顺序和来源,但即使没有这种配置,它仍然是错误的) 工作脚本是这
我使用的是EclipseIDE,下面的代码在浏览器上显示空白屏幕。我不知道为什么它会显示空白屏幕。有什么想法吗?提前谢谢。 请查找部署描述符文件。网状物xml:
我正在尝试在windows 10系统中运行hashicorp vault服务器作为windows服务。Vault服务器用户界面显示为空白屏幕。请参考我的配置详情。 config.hcl 默认情况下,库服务器在此 (http://localhost:8200/ui/) 本地 URL 中运行。当我导航到此 8200 端口时,将显示空白 UI 屏幕。 保管库 UI 的控制台日志 但与此同时,如果我们将v
我试图在Web视图中加载内容时显示progressDialog。完成后,progressDialog将被取消。 我有两个测试设备Android2.3.6和Android4.0。在Android2.3.6中,完全没有问题。对于Android 4.0平板电脑,在显示进度对话框时,点击它将隐藏或删除进度对话框,并使屏幕变为空白。 我的对话有什么问题? 谢谢