1.通过Intent的方式访问浏览器
Uri uri= Uri.parse("http://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, myBlogUri);
startActivity(intent);
2.通过WebView跳转自带的浏览器。
用户能明显感觉在跳转自己手机上的浏览器,通过Intent是用浏览器,但是没有跳转的感觉。
WebView web;
String url = "http://www.baidu.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
web = (WebView) findViewById(R.id.webView1);
web.loadUrl(url);
}
3.通过WebView,但是用户感觉不到跳转
在2中的内容上加上web.setWebViewClient(new WebViewClient() );这样实现的效果就是用户感觉不到跳转,这样用户就以为是你自己软件里面的东西了。
这三种方式都可以实现在android的app上访问网页的功能,但是各有各的特点,总的来说,1和2都是用的手机自带的浏览器,因为浏览器是一个成熟的app,里面肯定做了很多优化的功能,所以访问网页流畅,图片很快就能刷新出来,缺点就是让用户觉得自己使用你的软件,却直接在调用其他的浏览器,用户体验不佳。不过我的体会,第一种方式在少数访问网页的情况下是可以这样做的。
第三种方式访问网络,免去了自己布局和网络请求再解析,同时用户也不会觉得工程师偷懒,在使用其他软件,这就是3的优点,但是不好的是,如果没有进行优化。会出现加载速度会慢很多,图片资源难以加载等等问题,这些都是需要自己去设置属性或者找办法解决的。
WebView控件:
//设置可自由缩放网页 webview.getSettings().setSupportZoom(true); webview.getSettings().setBuiltInZoomControls(true);
几种加速WebView加载的方法
· 提高渲染的优先级
[java]
webView.getSettings().setRenderPriority(RenderPriority.HIGH);
· 使用webView.getSettings().setBlockNetworkImage,把图片加载放在最后来加载渲染
[java]
webView.getSettings().setBlockNetworkImage(true);
// 希望点击链接继续在当前webview中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象 webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { // 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边 view.loadUrl(url); return true; } });访问的时候可能会出现“net::ERR_UNKNOWN_URL_SCHEME”错误,这个时候代码:
<span style="white-space:pre"> </span><span style="font-size:18px;">webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//webview访问出net::ERR_UNKNOWN_URL_SCHEME错的解决地方
if (url.startsWith("http:") || url.startsWith("https:")) {
return false;
}
return true;
}
<span style="white-space:pre"> </span>});</span>
在webview.setWebViewClient(){ };这里面有很多方法可以用,根据需要选择,比如
- public boolean shouldOverrideUrlLoading(WebView view, String url)
- public void onPageStarted(WebView view, String url, Bitmap favicon)
- public void onPageFinished(WebView view, String url)
- public void onReceivedError(WebView view, int errorCode,
- String description, String failingUrl)
public class BActivity extends Activity {
WebView web;
String url = "http://www.baidu.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
web = (WebView) findViewById(R.id.webView1);
web.getSettings().setBuiltInZoomControls(false);
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setRenderPriority(RenderPriority.HIGH);
web.getSettings().setBlockNetworkImage(true);
web.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
web.getSettings().setAllowFileAccess(true);
web.getSettings().setAppCacheEnabled(true);
web.getSettings().setSaveFormData(false);
web.getSettings().setLoadsImagesAutomatically(true);
// WebView保留缩放功能但隐藏缩放控件:
web.getSettings().setSupportZoom(true);
web.getSettings().setBuiltInZoomControls(true);
web.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
BActivity.this.setTitle("Loading...");
BActivity.this.setProgress(progress * 100);
if (progress == 100)
BActivity.this.setTitle(R.string.app_name);
}
});
web.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//webview访问出net::ERR_UNKNOWN_URL_SCHEME错的解决地方
if (url.startsWith("http:") || url.startsWith("https:")) {
return false;
}
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // Handle
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
});
web.loadUrl(url);
}
@Override
// 设置回退
// 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
web.goBack(); // goBack()表示返回WebView的上一页面
return true;
}
return false;
}
@Override
protected void onDestroy() {
web.destroy();
super.onDestroy();
}
}