用webview浏览网页时我发现不可以打开QQ临时会话网页,其他浏览器打开可以唤起QQ,但我的工程显示这样,如图。

解决方案 »

  1.   

    package com.genwoxue.webview;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.View;
    import android.webkit.WebChromeClient;
    import android.webkit.WebResourceResponse;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.ProgressBar;/**
     * 实现加在一个WebView 为WebView加载时添加一个类型微信的进度条
     * @author Administrator
     *
     */
    @SuppressLint("SetJavaScriptEnabled")
    public class MainActivity extends Activity{
    private WebView webView;
    private ProgressBar progressBar;
    private String urlString = "http://xiaoquan.xiaopg6.top";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    }
    private void initView() {
    // TODO Auto-generated method stub
    webView = (WebView)findViewById(R.id.webview);
    progressBar = (ProgressBar)findViewById(R.id.pergress);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setDefaultTextEncodingName("utf-8");
    // 让网页适配屏幕
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//关闭WebView中缓存
    webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
    // TODO Auto-generated method stub
    super.onPageStarted(view, url, favicon);
    System.out.println("Page开始  " + url  + "   " + favicon);
    } @Override
    public void onPageFinished(WebView view, String url) {
    // TODO Auto-generated method stub
    super.onPageFinished(view, url);
    System.out.println("Page结束  " +url);
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // TODO Auto-generated method stub
    //return super.shouldOverrideUrlLoading(view, url);
    view.loadUrl(url);
    return true;
    }
    });
    webView.setWebChromeClient(new WebChromeClient() {            public boolean shouldOverrideUrlLoading(WebView view, String url) {                view.loadUrl(url);                return true;            }            @Override            public WebResourceResponse shouldInterceptRequest(WebView view,                    String url) {                if (url.startsWith("http") || url.startsWith("https")) {                    return super.shouldInterceptRequest(view, url);                } else {                    Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));                    startActivity(in);                    return null;                }            }        });
    webView.loadUrl(urlString);
    } //设置返回键动作(防止按返回键直接退出程序)
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO 自动生成的方法存根
    if(keyCode==KeyEvent.KEYCODE_BACK) {
    if(webView.canGoBack()) {//当webview不是处于第一页面时,返回上一个页面
    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    webView.goBack();
    return true;
    } }
    return false;
    }
    }
      

  2.   

    在shouldOverrideUrlLoading中处理。public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (URLUtil.isNetworkUrl(url)){
                    view.loadUrl(url);
                    return true;
                } else {
                    try {
                        startActivity(Intent.parseUri(url, Intent.URI_INTENT_SCHEME));
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                    return true;
                }
            }