Android webview 寫入cookie的解決方法以及一些屬性設置


原文地址:https://www.2cto.com/kf/201703/616868.html

 

Android webview 寫入cookie的解決方法以及一些屬性設置,webview怎么設置寫入Cookie的問題,項目中正好APP和網頁交互中要用到免登錄,因為在網上搜索了很多種方法,看到一個解決問題了,現在記錄分享下。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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設置的一些屬性:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//聲明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);

關於前進 / 后退網頁:

?
1
2
3
4
5
6
7
8
9
10
11
12
//是否可以后退
Webview.canGoBack()
//后退網頁
Webview.goBack()
//是否可以前進                    
Webview.canGoForward()
//前進網頁
Webview.goForward()
 
//以當前的index為起始點前進或者后退到歷史記錄中指定的steps
//如果steps為負數則為后退,正數則為前進
Webview.goBackOrForward(intsteps)

常見用法:Back鍵控制網頁后退

在不做任何處理前提下 ,瀏覽網頁時點擊系統的“Back”鍵,整個 Browser 會調用 finish()而結束自身 目標:點擊返回后,是網頁回退而不是推出瀏覽器 解決方案:在當前Activity中處理並消費掉該 Back 事件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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()

?
1
2
3
4
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,最后置空。

?
1
2
3
4
5
6
7
8
9
10
11
12
@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();
     }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM