频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
Android webview 写入cookie的解决方法以及一些属性设置
2017-03-24 09:15:59         来源:cb_smile的博客  
收藏   我要投稿

Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入Cookie的问题,项目中正好APP和网页交互中要用到免登录,因为在网上搜索了很多种方法,看到一个解决问题了,现在记录分享下。

 void setCookie() {
        String StringCookie = "key=" + value + ";path=/"
        CookieManager cookieManager = CookieManager.getInstance();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.removeSessionCookies(null);
            cookieManager.flush();
        } else {
            cookieManager.removeSessionCookie();
            CookieSyncManager.getInstance().sync();
        }
        cookieManager.setAcceptCookie(true);
        cookieManager.setCookie(url, StringCookie);
    }

以上代码在webview设置属性、webview.loadUrl之前调用就可以了

webview设置的一些属性:

//声明WebSettings子类
WebSettings webSettings = webView.getSettings();

 //支持javascript
webSettings.setJavaScriptEnabled(true);

//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小 
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);

//缩放操作
webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件

//设置WebView缓存
//优先使用缓存: 
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
//缓存模式如下:
//LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
//LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
//LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
//LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

//不使用缓存: 
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

关于前进 / 后退网页:

//是否可以后退
Webview.canGoBack() 
//后退网页
Webview.goBack()
//是否可以前进                     
Webview.canGoForward()
//前进网页
Webview.goForward()

//以当前的index为起始点前进或者后退到历史记录中指定的steps
//如果steps为负数则为后退,正数则为前进
Webview.goBackOrForward(intsteps) 

常见用法:Back键控制网页后退

在不做任何处理前提下 ,浏览网页时点击系统的“Back”键,整个 Browser 会调用 finish()而结束自身 目标:点击返回后,是网页回退而不是推出浏览器 解决方案:在当前Activity中处理并消费掉该 Back 事件
 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KEYCODE_BACK) && Webview.canGoBack()) { 
        Webview.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
//或者下面这种
   @Override
public void onBackPressed() {
  if (webView.canGoBack()) {
          webView.goBack();
          return;
     }
        super.onBackPressed();
 }

注意事项:如何避免WebView内存泄露?

不在xml中定义 Webview ,而是在需要的时候在Activity中创建,并且Context使用 getApplicationgContext()
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        webView= new WebView(getApplicationContext());
        webView.setLayoutParams(params);
        mLayout.addView(webView);
在 Activity 销毁( WebView )的时候,先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空。
@Override
    protected void onDestroy() {
        if (webView!= null) {
            webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
            webView.clearHistory();

            ((ViewGroup) webView.getParent()).removeView(webView);
            webView.destroy();
            webView= null;
        }
        super.onDestroy();
    }
点击复制链接 与好友分享!回本站首页
上一篇:android 四大组件之一 Service 的应用
下一篇:Monkey-Android压力测试
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站