Android WebView有时会显示浏览器选择屏幕
问题描述:
关于我的活动的创建,我正在触发一个加载处理程序(同时显示一个微调控件),其中包括处理程序代码,我在三个私有WebView对象上调用loadURL。Android WebView有时会显示浏览器选择屏幕
这样做的目的是预先缓存这些网页,然后根据按钮触摸事件显示它们。实际的加载和显示工作正常,除了有时(看不到图案)我(或我的测试人员)没有理由得到浏览器选择屏幕(如Chrome/Firefox)。
所以我的第一个问题是会导致什么,以及如何防止它发生?
否则怎么回事,你会执行以下操作:三个网页(简单的HTML,没有图像表格等)
- 预缓存的结果。
- 取决于一个按钮触摸屏幕上的布局显示网页的结果(每次相同的布局,所以当按下按钮2时,它的相应的网页将替换前一个)。
答
不想回答我自己的问题,但作为唯一的答案是不相关的问题。
看来问题是由重定向引起的,加载的网页实际上没有重定向它,但服务器正在执行来自子域的内部重定向。我用下面的代码解决了这个问题。
this.wvBasic.setWebViewClient(new WebViewClient() {
private String pendingUrl;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (pendingUrl == null) {
pendingUrl = url;
}
}
@Override
public void onPageFinished(WebView view, String url) {
if (!url.equals(pendingUrl)) {
Log.d(TAG, "Detected HTTP redirect " + pendingUrl + "->" + url);
pendingUrl = null;
}
}
});
this.wvBasic.getSettings().setJavaScriptEnabled(false);
答
这是一个非常正常的行为。您创建一个intent
,并且操作系统正在使用合适的intent-filter
来搜索活动以处理该startActivity(intent)
。由于有更多的应用程序可以处理您的意图(在您的情况下,更多的浏览器),操作系统为您提供了从这些活动中进行选择的可能性。
现在,我检查了this线程,它似乎是你正在寻找的信息。根据documentation,你可以retrieve a set of activities that should be presented to the user as similar options
。如果您能够对这些活动进行过滤,以便您的应用使用内置浏览器(保证可以安装在所有设备上),那么您可以轻松前往。
我实际上并没有用webview来解决这个问题。它们动态添加为现有LinearLayout视图的子视图。只需轻触按钮,相关的WebView将作为子项添加到LinearLayout中(先移除退出的子项)。这是添加WebView的行为,似乎有时会激发选择屏幕。 – melodiouscode 2012-07-30 17:20:28
有时候你的意思是什么? – overbet13 2012-07-30 17:25:03
这是一个难以复制的错误。您可以使用应用程序一次选择三个按钮中的每一个(并查看相关的网页浏览)。但下次它会显示你的浏览器选择。这发生在几个手机上,尽管所有的都在运行ICS> – melodiouscode 2012-07-30 17:28:43