Android webview使用详解

打开网页时不调用系统浏览器, 而是在本WebView中显示: ![复制代码](http://common.cnblogs.com/images/copycode.gif) mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); ![复制代码](http://common.cnblogs.com/images/copycode.gif) 通过java代码调用javascript ![复制代码](http://common.cnblogs.com/images/copycode.gif) WebSettings webSettings = mWebView .getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { webview.loadUrl("javascript:wave()"); } }); } }, "demo"); ![复制代码](http://common.cnblogs.com/images/copycode.gif) 按返回键时, 不退出程序而是返回上一浏览页面: ![复制代码](http://common.cnblogs.com/images/copycode.gif) public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } ![复制代码](http://common.cnblogs.com/images/copycode.gif) 打开页面时, 自适应屏幕: WebSettings webSettings = mWebView .getSettings(); webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放 webSettings.setLoadWithOverviewMode(true); 便页面支持缩放: WebSettings webSettings = mWebView .getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setBuiltInZoomControls(true); webSettings.setSupportZoom(true); 6.如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。 ...

2016年11月21日 · 5 分钟 · 天边的星星

Android WebView 与登录状态保持一致,建立SESSION会话

在登陆界面获取验证码的时候: ``` `new Thread(){ @Override public void run() { try { SharedPreferences spf = getSharedPreferences(<span class=“hljs-string”>“Cookie”</span>, Context<span class=“hljs-preprocessor”>.MODE</span>_PRIVATE)<span class=“hljs-comment”>;</span> HttpClient client = new DefaultHttpClient()&lt;span class="hljs-comment">;&lt;/span> HttpGet get = new HttpGet(Gloable&lt;span class="hljs-preprocessor">.DOLOAD&lt;/span>+&lt;span class="hljs-string">"code.gif"&lt;/span>)&lt;span class="hljs-comment">;&lt;/span> HttpResponse response = client&lt;span class="hljs-preprocessor">.execute&lt;/span>(get)&lt;span class="hljs-comment">;&lt;/span> Cookie cookie = ((AbstractHttpClient) client)&lt;span class="hljs-preprocessor">.getCookieStore&lt;/span>()&lt;span class="hljs-preprocessor">.getCookies&lt;/span>()&lt;span class="hljs-preprocessor">.get&lt;/span>(&lt;span class="hljs-number">0&lt;/span>)&lt;span class="hljs-comment">;&lt;/span> String sessionId = cookie&lt;span class="hljs-preprocessor">.getValue&lt;/span>()&lt;span class="hljs-comment">;&lt;/span> SharedPreferences&lt;span class="hljs-preprocessor">.Editor&lt;/span> editor = spf&lt;span class="hljs-preprocessor">.edit&lt;/span>()&lt;span class="hljs-comment">;&lt;/span> editor&lt;span class="hljs-preprocessor">.putString&lt;/span>(&lt;span class="hljs-string">"sessionId"&lt;/span>, sessionId)&lt;span class="hljs-comment">;&lt;/span> String cookieString = cookie&lt;span class="hljs-preprocessor">.getName&lt;/span>()+&lt;span class="hljs-string">"="&lt;/span>+cookie&lt;span class="hljs-preprocessor">.getValue&lt;/span>()+ &lt;span class="hljs-string">";domain="&lt;/span>+cookie&lt;span class="hljs-preprocessor">.getDomain&lt;/span>()&lt;span class="hljs-comment">;&lt;/span> Log&lt;span class="hljs-preprocessor">.e&lt;/span>(&lt;span class="hljs-string">"test"&lt;/span>, &lt;span class="hljs-string">"cookieString:"&lt;/span>+cookieString)&lt;span class="hljs-comment">;&lt;/span> editor&lt;span class="hljs-preprocessor">.putString&lt;/span>(&lt;span class="hljs-string">"cookieString"&lt;/span>, cookieString)&lt;span class="hljs-comment">;&lt;/span> editor&lt;span class="hljs-preprocessor">.commit&lt;/span>()&lt;span class="hljs-comment">;&lt;/span> Log&lt;span class="hljs-preprocessor">.i&lt;/span>(&lt;span class="hljs-string">"info"&lt;/span>, &lt;span class="hljs-string">"b--JSESSIONID="&lt;/span> + sessionId)&lt;span class="hljs-comment">;&lt;/span> if (response&lt;span class="hljs-preprocessor">.getStatusLine&lt;/span>()&lt;span class="hljs-preprocessor">.getStatusCode&lt;/span>() == &lt;span class="hljs-number">200&lt;/span>) { byte[] bytes = EntityUtils&lt;span class="hljs-preprocessor">.toByteArray&lt;/span>(response&lt;span class="hljs-preprocessor">.getEntity&lt;/span>())&lt;span class="hljs-comment">;&lt;/span> final Bitmap bitmap = BitmapFactory&lt;span class="hljs-preprocessor">.decodeByteArray&lt;/span>(bytes, &lt;span class="hljs-number">0&lt;/span>, bytes&lt;span class="hljs-preprocessor">.length&lt;/span>)&lt;span class="hljs-comment">;&lt;/span> runOnUiThread(new Runnable() { public void run() { Drawable drawable = new BitmapDrawable(bitmap)&lt;span class="hljs-comment">;&lt;/span> iv_showCode&lt;span class="hljs-preprocessor">.setBackgroundDrawable&lt;/span>(drawable)&lt;span class="hljs-comment">;&lt;/span> } })&lt;span class="hljs-comment">;&lt;/span> } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e&lt;span class="hljs-preprocessor">.printStackTrace&lt;/span>()&lt;span class="hljs-comment">;&lt;/span> } catch (IOException e) { // TODO Auto-generated catch block e&lt;span class="hljs-preprocessor">.printStackTrace&lt;/span>()&lt;span class="hljs-comment">;&lt;/span> } } }&lt;span class="hljs-preprocessor">.start&lt;/span>()&lt;span class="hljs-comment">;&lt;/span>` 在webview加载url之前: ``` `SharedPreferences spf = getSharedPreferences(&lt;span class="hljs-string">"Cookie"&lt;/span>, Context&lt;span class="hljs-preprocessor">.MODE&lt;/span>_PRIVATE)&lt;span class="hljs-comment">;&lt;/span> CookieSyncManager&lt;span class="hljs-preprocessor">.createInstance&lt;/span>(this)&lt;span class="hljs-comment">;&lt;/span> CookieManager cookieManager = CookieManager&lt;span class="hljs-preprocessor">.getInstance&lt;/span>()&lt;span class="hljs-comment">;&lt;/span> String cookieString = spf&lt;span class="hljs-preprocessor">.getString&lt;/span>(&lt;span class="hljs-string">"cookieString"&lt;/span>, &lt;span class="hljs-string">""&lt;/span>)&lt;span class="hljs-comment">;&lt;/span> cookieManager&lt;span class="hljs-preprocessor">.setCookie&lt;/span>(url, cookieString)&lt;span class="hljs-comment">;&lt;/span> CookieSyncManager&lt;span class="hljs-preprocessor">.getInstance&lt;/span>()&lt;span class="hljs-preprocessor">.sync&lt;/span>()&lt;span class="hljs-comment">;&lt;/span> webview&lt;span class="hljs-preprocessor">.loadUrl&lt;/span>(url)&lt;span class="hljs-comment">;&lt;/span>` android客户端通过httpClient或者httpUrlConnection进行登录后,为了把登录状态同步到webView中,这时需要进行cookie的同步 一.cookie同步方式 下面是登录线程: public class LoginThread extends Thread{ private Handler loginHandler; public LoginThread(Handler loginHandler) { this.loginHandler = loginHandler; } @Override public void run() { List cookieLst = new ArrayList(); HttpParams httpParams = new BasicHttpParams(); ConnManagerParams.setMaxTotalConnections(httpParams, 5); ConnManagerParams.setTimeout(httpParams, 151000); HttpConnectionParams.setSoTimeout(httpParams, 101000); HttpConnectionParams.setTcpNoDelay(httpParams, true); HttpPost httpPost = new HttpPost(“http://192.168.1.107/cookie/login.php”); List nvPairs = new ArrayList(); nvPairs.add(new BasicNameValuePair(“name”, “lisi”)); nvPairs.add(new BasicNameValuePair(“age”,”22″)); nvPairs.add(new BasicNameValuePair(“gender”, “男”)); ...

2016年10月11日 · 4 分钟 · 天边的星星

android webView网页表单自动登录(单点登录)

今天帮助网友解决了一个在应用中登录后进应用的网页自动登录。 在这里分享给大家,希望能帮助更多的人。直接上代码: /** * 网页自动登录 * http://haohailai.taobao.com/ * @author xiehaibo * */ public class MainActivity extends Activity { private WebView webView1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView1 = (WebView) findViewById(R.id.webView1); // 设置支持JavaScript脚本 WebSettings webSettings = webView1.getSettings(); webSettings.setJavaScriptEnabled(true); // 设置可以访问文件 webSettings.setAllowFileAccess(true); // 设置支持缩放 webSettings.setBuiltInZoomControls(true); // 设置WebViewClient webView1.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { Log.d("admin", "网页加载完了"); String uname = "帐号"; String password = "密码"; // 加载完了再调用js登录代码 view.loadUrl("javascript: {" + "document.getElementById('username').value = '" + uname + "';" + "document.getElementById('password').value = '" + password + "';" + "var frms = document.getElementsByName('tableForm');" + "frms[0].submit(); };"); // 登录成功后加载框取消 super.onPageFinished(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d("admin", "网页开始加载"); // 在这里可以创建一个加载框。。。 super.onPageStarted(view, url, favicon); } }); webView1.loadUrl("网页地址,包含登录表单"); } } 注意的是: ...

2016年8月22日 · 1 分钟 · 天边的星星

Android WebView 总结

1、添加权限:AndroidManifest.xml中必须使用许可”android.permission.INTERNET”,否则会出Web page not available错误。 2、在要Activity中生成一个WebView组件:WebView webView = new WebView(this); 3、设置WebView基本信息: 如果访问的页面中有Javascript,则webview必须设置支持Javascript。 webview.getSettings().setJavaScriptEnabled(true); 触摸焦点起作用 requestFocus(); 取消滚动条 this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY); 4、设置WevView要显示的网页: 互联网用:webView.loadUrl(“http://www.google.com”); 本地文件用:webView.loadUrl(“file:///android_asset/XX.html”); 本地文件存放在:assets文件中 5、如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。 给WebView添加一个事件监听对象(WebViewClient) 并重写其中的一些方法 shouldOverrideUrlLoading:对网页中超链接按钮的响应。 当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url onLoadResource onPageStart onPageFinish onReceiveError onReceivedHttpAuthRequest 6、如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。 [?](http://www.oschina.net/question/163910_26516#) <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `public` `boolean` `onKeyDown(``int` `keyCoder,KeyEvent event){` </div> <div class="line number2 index1 alt1"> ` ``if``(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){` </div> <div class="line number3 index2 alt2"> ` ``webview.goBack(); ``//goBack()表示返回webView的上一页面` </div> <div class="line number4 index3 alt1"> </div> <div class="line number5 index4 alt2"> ` ``return` `true``;` </div> <div class="line number6 index5 alt1"> ` ``}` </div> <div class="line number7 index6 alt2"> ` ``return` `false``;` </div> <div class="line number8 index7 alt1"> `}` </div> </div> </td> </tr> </table> &nbsp; ### Android监听WebView滑动到底部 MainActivity如下: <div> <div id="highlighter_5859" class="syntaxhighlighter java"> <div class="toolbar"> [?](http://www.open-open.com/lib/view/open1379383341959.html#) </div> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> <div class="line number23 index22 alt2"> 23 </div> <div class="line number24 index23 alt1"> 24 </div> <div class="line number25 index24 alt2"> 25 </div> <div class="line number26 index25 alt1"> 26 </div> <div class="line number27 index26 alt2"> 27 </div> <div class="line number28 index27 alt1"> 28 </div> <div class="line number29 index28 alt2"> 29 </div> <div class="line number30 index29 alt1"> 30 </div> <div class="line number31 index30 alt2"> 31 </div> <div class="line number32 index31 alt1"> 32 </div> <div class="line number33 index32 alt2"> 33 </div> <div class="line number34 index33 alt1"> 34 </div> <div class="line number35 index34 alt2"> 35 </div> <div class="line number36 index35 alt1"> 36 </div> <div class="line number37 index36 alt2"> 37 </div> <div class="line number38 index37 alt1"> 38 </div> <div class="line number39 index38 alt2"> 39 </div> <div class="line number40 index39 alt1"> 40 </div> <div class="line number41 index40 alt2"> 41 </div> <div class="line number42 index41 alt1"> 42 </div> <div class="line number43 index42 alt2"> 43 </div> <div class="line number44 index43 alt1"> 44 </div> <div class="line number45 index44 alt2"> 45 </div> <div class="line number46 index45 alt1"> 46 </div> <div class="line number47 index46 alt2"> 47 </div> <div class="line number48 index47 alt1"> 48 </div> <div class="line number49 index48 alt2"> 49 </div> <div class="line number50 index49 alt1"> 50 </div> <div class="line number51 index50 alt2"> 51 </div> <div class="line number52 index51 alt1"> 52 </div> <div class="line number53 index52 alt2"> 53 </div> <div class="line number54 index53 alt1"> 54 </div> <div class="line number55 index54 alt2"> 55 </div> <div class="line number56 index55 alt1"> 56 </div> <div class="line number57 index56 alt2"> 57 </div> <div class="line number58 index57 alt1"> 58 </div> <div class="line number59 index58 alt2"> 59 </div> <div class="line number60 index59 alt1"> 60 </div> <div class="line number61 index60 alt2"> 61 </div> <div class="line number62 index61 alt1"> 62 </div> <div class="line number63 index62 alt2"> 63 </div> <div class="line number64 index63 alt1"> 64 </div> <div class="line number65 index64 alt2"> 65 </div> <div class="line number66 index65 alt1"> 66 </div> <div class="line number67 index66 alt2"> 67 </div> <div class="line number68 index67 alt1"> 68 </div> <div class="line number69 index68 alt2"> 69 </div> <div class="line number70 index69 alt1"> 70 </div> <div class="line number71 index70 alt2"> 71 </div> <div class="line number72 index71 alt1"> 72 </div> <div class="line number73 index72 alt2"> 73 </div> <div class="line number74 index73 alt1"> 74 </div> <div class="line number75 index74 alt2"> 75 </div> <div class="line number76 index75 alt1"> 76 </div> <div class="line number77 index76 alt2"> 77 </div> <div class="line number78 index77 alt1"> 78 </div> <div class="line number79 index78 alt2"> 79 </div> <div class="line number80 index79 alt1"> 80 </div> <div class="line number81 index80 alt2"> 81 </div> <div class="line number82 index81 alt1"> 82 </div> <div class="line number83 index82 alt2"> 83 </div> <div class="line number84 index83 alt1"> 84 </div> <div class="line number85 index84 alt2"> 85 </div> <div class="line number86 index85 alt1"> 86 </div> <div class="line number87 index86 alt2"> 87 </div> <div class="line number88 index87 alt1"> 88 </div> <div class="line number89 index88 alt2"> 89 </div> <div class="line number90 index89 alt1"> 90 </div> <div class="line number91 index90 alt2"> 91 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `package` `cn.testwebview;` </div> <div class="line number2 index1 alt1"> `import` `android.app.Activity;` </div> <div class="line number3 index2 alt2"> `import` `android.graphics.Bitmap;` </div> <div class="line number4 index3 alt1"> `import` `android.os.Bundle;` </div> <div class="line number5 index4 alt2"> `import` `android.webkit.WebSettings;` </div> <div class="line number6 index5 alt1"> `import` `android.webkit.WebView;` </div> <div class="line number7 index6 alt2"> `import` `android.webkit.WebViewClient;` </div> <div class="line number8 index7 alt1"> `import` `cn.testwebview.TestWebView.ScrollInterface;` </div> <div class="line number9 index8 alt2"> `/**` </div> <div class="line number10 index9 alt1"> ` ``* Demo描述:` </div> <div class="line number11 index10 alt2"> ` ``* 监听WebView滑动到底部` </div> <div class="line number12 index11 alt1"> ` ``*` </div> <div class="line number13 index12 alt2"> ` ``* 参考资料:` </div> <div class="line number14 index13 alt1"> ` ``* 1 http://blog.csdn.net/conant1989/article/details/8124582` </div> <div class="line number15 index14 alt2"> ` ``* Thank you very much` </div> <div class="line number16 index15 alt1"> ` ``*/` </div> <div class="line number17 index16 alt2"> `public` `class` `MainActivity ``extends` `Activity {` </div> <div class="line number18 index17 alt1"> ` ``private` `TestWebView mTestWebView;` </div> <div class="line number19 index18 alt2"> ` ``@Override` </div> <div class="line number20 index19 alt1"> ` ``protected` `void` `onCreate(Bundle savedInstanceState) {` </div> <div class="line number21 index20 alt2"> ` ``super``.onCreate(savedInstanceState);` </div> <div class="line number22 index21 alt1"> ` ``setContentView(R.layout.main);` </div> <div class="line number23 index22 alt2"> ` ``initWebView();` </div> <div class="line number24 index23 alt1"> ` ``}` </div> <div class="line number25 index24 alt2"> ` ` </div> <div class="line number26 index25 alt1"> ` ` </div> <div class="line number27 index26 alt2"> ` ` </div> <div class="line number28 index27 alt1"> ` ``//设置WebView` </div> <div class="line number29 index28 alt2"> ` ``private` `void` `initWebView() {` </div> <div class="line number30 index29 alt1"> ` ``mTestWebView = (TestWebView) findViewById(R.id.webView);` </div> <div class="line number31 index30 alt2"> ` ``mTestWebView.setVerticalScrollBarEnabled(``true``);` </div> <div class="line number32 index31 alt1"> ` ``mTestWebView.setHorizontalScrollBarEnabled(``false``);` </div> <div class="line number33 index32 alt2"> ` ``mTestWebView.getSettings().setSupportZoom(``true``);` </div> <div class="line number34 index33 alt1"> ` ``mTestWebView.getSettings().setBuiltInZoomControls(``true``);` </div> <div class="line number35 index34 alt2"> ` ``mTestWebView.getSettings().setJavaScriptEnabled(``true``);` </div> <div class="line number36 index35 alt1"> ` ` </div> <div class="line number37 index36 alt2"> ` ``mTestWebView.getSettings().setDomStorageEnabled(``true``);` </div> <div class="line number38 index37 alt1"> ` ``mTestWebView.getSettings().setPluginsEnabled(``true``);` </div> <div class="line number39 index38 alt2"> ` ``mTestWebView.requestFocus();` </div> <div class="line number40 index39 alt1"> ` ` </div> <div class="line number41 index40 alt2"> ` ``mTestWebView.getSettings().setUseWideViewPort(``true``);` </div> <div class="line number42 index41 alt1"> ` ``mTestWebView.getSettings().setLoadWithOverviewMode(``true``);` </div> <div class="line number43 index42 alt2"> ` ``mTestWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);` </div> <div class="line number44 index43 alt1"> ` ` </div> <div class="line number45 index44 alt2"> ` ``mTestWebView.loadUrl(``"http://www.ifeng.com"``);` </div> <div class="line number46 index45 alt1"> ` ``mTestWebView.setWebViewClient(``new` `TestWebViewClient());` </div> <div class="line number47 index46 alt2"> ` ``webViewScroolChangeListener();` </div> <div class="line number48 index47 alt1"> ` ` </div> <div class="line number49 index48 alt2"> ` ``}` </div> <div class="line number50 index49 alt1"> ` ` </div> <div class="line number51 index50 alt2"> ` ``//核心代码` </div> <div class="line number52 index51 alt1"> ` ``private` `void` `webViewScroolChangeListener() {` </div> <div class="line number53 index52 alt2"> ` ``mTestWebView.setOnCustomScroolChangeListener(``new` `ScrollInterface() {` </div> <div class="line number54 index53 alt1"> ` ``@Override` </div> <div class="line number55 index54 alt2"> ` ``public` `void` `onSChanged(``int` `l, ``int` `t, ``int` `oldl, ``int` `oldt) {` </div> <div class="line number56 index55 alt1"> ` ``//WebView的总高度` </div> <div class="line number57 index56 alt2"> ` ``float` `webViewContentHeight=mTestWebView.getContentHeight() * mTestWebView.getScale();` </div> <div class="line number58 index57 alt1"> ` ``//WebView的现高度` </div> <div class="line number59 index58 alt2"> ` ``float` `webViewCurrentHeight=(mTestWebView.getHeight() + mTestWebView.getScrollY());` </div> <div class="line number60 index59 alt1"> ` ``System.out.println(``"webViewContentHeight="``+webViewContentHeight);` </div> <div class="line number61 index60 alt2"> ` ``System.out.println(``"webViewCurrentHeight="``+webViewCurrentHeight);` </div> <div class="line number62 index61 alt1"> ` ``if` `((webViewContentHeight-webViewCurrentHeight) == ````) {` </div> <div class="line number63 index62 alt2"> ` ``System.out.println(``"WebView滑动到了底端"``);` </div> <div class="line number64 index63 alt1"> ` ``}` </div> <div class="line number65 index64 alt2"> ` ``}` </div> <div class="line number66 index65 alt1"> ` ``});` </div> <div class="line number67 index66 alt2"> ` ``}` </div> <div class="line number68 index67 alt1"> ` ` </div> <div class="line number69 index68 alt2"> </div> <div class="line number70 index69 alt1"> ` ``private` `class` `TestWebViewClient ``extends` `WebViewClient{` </div> <div class="line number71 index70 alt2"> ` ``@Override` </div> <div class="line number72 index71 alt1"> ` ``public` `void` `onPageStarted(WebView view, String url, Bitmap favicon) {` </div> <div class="line number73 index72 alt2"> ` ``super``.onPageStarted(view, url, favicon);` </div> <div class="line number74 index73 alt1"> ` ``}` </div> <div class="line number75 index74 alt2"> ` ``@Override` </div> <div class="line number76 index75 alt1"> ` ``public` `boolean` `shouldOverrideUrlLoading(WebView view, String url) {` </div> <div class="line number77 index76 alt2"> ` ``view.loadUrl(url);` </div> <div class="line number78 index77 alt1"> ` ``return` `true``;` </div> <div class="line number79 index78 alt2"> ` ``}` </div> <div class="line number80 index79 alt1"> ` ``@Override` </div> <div class="line number81 index80 alt2"> ` ``public` `void` `onPageFinished(WebView view, String url) {` </div> <div class="line number82 index81 alt1"> ` ``super``.onPageFinished(view, url);` </div> <div class="line number83 index82 alt2"> ` ` </div> <div class="line number84 index83 alt1"> ` ``}` </div> <div class="line number85 index84 alt2"> ` ``@Override` </div> <div class="line number86 index85 alt1"> ` ``public` `void` `onReceivedError(WebView view, ``int` `errorCode,String description, String failingUrl) {` </div> <div class="line number87 index86 alt2"> ` ``super``.onReceivedError(view, errorCode, description, failingUrl);` </div> <div class="line number88 index87 alt1"> ` ``}` </div> <div class="line number89 index88 alt2"> ` ``}` </div> <div class="line number90 index89 alt1"> ` ` </div> <div class="line number91 index90 alt2"> `}` </div> </div> </td> </tr> </table> </div> </div> TestWebView如下: <div> <div id="highlighter_625536" class="syntaxhighlighter java"> <div class="toolbar"> [?](http://www.open-open.com/lib/view/open1379383341959.html#) </div> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> <div class="line number17 index16 alt2"> 17 </div> <div class="line number18 index17 alt1"> 18 </div> <div class="line number19 index18 alt2"> 19 </div> <div class="line number20 index19 alt1"> 20 </div> <div class="line number21 index20 alt2"> 21 </div> <div class="line number22 index21 alt1"> 22 </div> <div class="line number23 index22 alt2"> 23 </div> <div class="line number24 index23 alt1"> 24 </div> <div class="line number25 index24 alt2"> 25 </div> <div class="line number26 index25 alt1"> 26 </div> <div class="line number27 index26 alt2"> 27 </div> <div class="line number28 index27 alt1"> 28 </div> <div class="line number29 index28 alt2"> 29 </div> <div class="line number30 index29 alt1"> 30 </div> <div class="line number31 index30 alt2"> 31 </div> <div class="line number32 index31 alt1"> 32 </div> <div class="line number33 index32 alt2"> 33 </div> <div class="line number34 index33 alt1"> 34 </div> <div class="line number35 index34 alt2"> 35 </div> <div class="line number36 index35 alt1"> 36 </div> <div class="line number37 index36 alt2"> 37 </div> <div class="line number38 index37 alt1"> 38 </div> <div class="line number39 index38 alt2"> 39 </div> <div class="line number40 index39 alt1"> 40 </div> <div class="line number41 index40 alt2"> 41 </div> <div class="line number42 index41 alt1"> 42 </div> <div class="line number43 index42 alt2"> 43 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `package` `cn.testwebview;` </div> <div class="line number2 index1 alt1"> </div> <div class="line number3 index2 alt2"> `import` `android.content.Context;` </div> <div class="line number4 index3 alt1"> `import` `android.util.AttributeSet;` </div> <div class="line number5 index4 alt2"> `import` `android.webkit.WebView;` </div> <div class="line number6 index5 alt1"> </div> <div class="line number7 index6 alt2"> `public` `class` `TestWebView ``extends` `WebView {` </div> <div class="line number8 index7 alt1"> ` ``public` `ScrollInterface mScrollInterface;` </div> <div class="line number9 index8 alt2"> </div> <div class="line number10 index9 alt1"> ` ``public` `TestWebView(Context context) {` </div> <div class="line number11 index10 alt2"> ` ``super``(context);` </div> <div class="line number12 index11 alt1"> ` ``}` </div> <div class="line number13 index12 alt2"> </div> <div class="line number14 index13 alt1"> ` ``public` `TestWebView(Context context, AttributeSet attrs, ``int` `defStyle) {` </div> <div class="line number15 index14 alt2"> ` ``super``(context, attrs, defStyle);` </div> <div class="line number16 index15 alt1"> ` ``}` </div> <div class="line number17 index16 alt2"> </div> <div class="line number18 index17 alt1"> ` ``public` `TestWebView(Context context, AttributeSet attrs) {` </div> <div class="line number19 index18 alt2"> ` ``super``(context, attrs);` </div> <div class="line number20 index19 alt1"> ` ``}` </div> <div class="line number21 index20 alt2"> </div> <div class="line number22 index21 alt1"> ` ``@Override` </div> <div class="line number23 index22 alt2"> ` ``protected` `void` `onScrollChanged(``int` `l, ``int` `t, ``int` `oldl, ``int` `oldt) {` </div> <div class="line number24 index23 alt1"> </div> <div class="line number25 index24 alt2"> ` ``super``.onScrollChanged(l, t, oldl, oldt);` </div> <div class="line number26 index25 alt1"> </div> <div class="line number27 index26 alt2"> ` ``mScrollInterface.onSChanged(l, t, oldl, oldt);` </div> <div class="line number28 index27 alt1"> </div> <div class="line number29 index28 alt2"> ` ``}` </div> <div class="line number30 index29 alt1"> </div> <div class="line number31 index30 alt2"> ` ``public` `void` `setOnCustomScroolChangeListener(ScrollInterface scrollInterface) {` </div> <div class="line number32 index31 alt1"> </div> <div class="line number33 index32 alt2"> ` ``this``.mScrollInterface = scrollInterface;` </div> <div class="line number34 index33 alt1"> </div> <div class="line number35 index34 alt2"> ` ``}` </div> <div class="line number36 index35 alt1"> </div> <div class="line number37 index36 alt2"> ` ``public` `interface` `ScrollInterface {` </div> <div class="line number38 index37 alt1"> </div> <div class="line number39 index38 alt2"> ` ``public` `void` `onSChanged(``int` `l, ``int` `t, ``int` `oldl, ``int` `oldt);` </div> <div class="line number40 index39 alt1"> </div> <div class="line number41 index40 alt2"> ` ``}` </div> <div class="line number42 index41 alt1"> </div> <div class="line number43 index42 alt2"> `}` </div> </div> </td> </tr> </table> </div> </div> &nbsp; main.xml如下: <div> <div id="highlighter_380669" class="syntaxhighlighter xml"> <div class="toolbar"> [?](http://www.open-open.com/lib/view/open1379383341959.html#) </div> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="gutter"> <div class="line number1 index0 alt2"> 1 </div> <div class="line number2 index1 alt1"> 2 </div> <div class="line number3 index2 alt2"> 3 </div> <div class="line number4 index3 alt1"> 4 </div> <div class="line number5 index4 alt2"> 5 </div> <div class="line number6 index5 alt1"> 6 </div> <div class="line number7 index6 alt2"> 7 </div> <div class="line number8 index7 alt1"> 8 </div> <div class="line number9 index8 alt2"> 9 </div> <div class="line number10 index9 alt1"> 10 </div> <div class="line number11 index10 alt2"> 11 </div> <div class="line number12 index11 alt1"> 12 </div> <div class="line number13 index12 alt2"> 13 </div> <div class="line number14 index13 alt1"> 14 </div> <div class="line number15 index14 alt2"> 15 </div> <div class="line number16 index15 alt1"> 16 </div> </td> <td class="code"> <div class="container"> <div class="line number1 index0 alt2"> `&lt;``RelativeLayout` </div> <div class="line number2 index1 alt1"> ` ``xmlns:android``=``"http://schemas.android.com/apk/res/android"` </div> <div class="line number3 index2 alt2"> ` ``xmlns:tools``=``"http://schemas.android.com/tools"` </div> <div class="line number4 index3 alt1"> ` ``android:layout_width``=``"match_parent"` </div> <div class="line number5 index4 alt2"> ` ``android:layout_height``=``"match_parent"` </div> <div class="line number6 index5 alt1"> ` ``&gt;` </div> <div class="line number7 index6 alt2"> </div> <div class="line number8 index7 alt1"> ` ``&lt;``cn.testwebview.TestWebView` </div> <div class="line number9 index8 alt2"> ` ``android:id``=``"@+id/webView"` </div> <div class="line number10 index9 alt1"> ` ``android:layout_width``=``"fill_parent"` </div> <div class="line number11 index10 alt2"> ` ``android:layout_height``=``"fill_parent"` </div> <div class="line number12 index11 alt1"> ` ``android:text``=``"@string/hello_world"` </div> <div class="line number13 index12 alt2"> ` ``android:layout_centerInParent``=``"true"` </div> <div class="line number14 index13 alt1"> ` ``/&gt;` </div> <div class="line number15 index14 alt2"> </div> <div class="line number16 index15 alt1"> `&lt;/``RelativeLayout``&gt;` </div> </div> </td> </tr> </table> </div> </div> &nbsp; </div>

2015年5月25日 · 13 分钟 · 天边的星星

Android WebView 与HttpClient 共用本地cookie问题

我是为了解决:WebView 缓存下来的cookie可以用于HttpClient,因为我的HttpClient单独需要取一些数据,但是依赖于本地的cookie。如果没有cookie返回来的是登录页面 [html] view plaincopy在CODE上查看代码片派生到我的代码片 核心代码: mainActivity.java public void onCreate(Bundle savedInstanceState) { View v = inflater.inflate(R.layout.main_fragment, container, false); mWebView = (WebView) v.findViewById(R.id.webview); MyWebViewClient webviewClient = new MyWebViewClient(); mWebView.setWebViewClient(webviewClient); WebSettings webset = mWebView.getSettings(); webset.setJavaScriptEnabled(true); mWebView.loadUrl(Constants.TALKGROUP_URL); return v; } private class MyWebViewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); IWLog.d(TAG, “onPageFinished() url is:”+url); /* 将cookie保存起来*/ String c = CookieManager.getInstance().getCookie(url); DataCenter.setCookie(c); CookieSyncManager.getInstance().sync(); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { IWLog.d(TAG, “onReceivedError() errorCode:” + errorCode+”—-failingUrl”+failingUrl); super.onReceivedError(view, errorCode, description, failingUrl); } ...

2014年12月5日 · 2 分钟 · 天边的星星

Android(安卓)WebView设置cookie

最近两天一直想用安卓模拟登陆,利用新的WebView显示登陆后可以访问的页面,但是不管怎么访问需要登陆后才能访问的页面,还是跳回到登陆页,后来网上看了下是cookie没有设置,找了半天才到到合适的设置方法: 登陆方法: private Cookie cookie; public static HttpContext localContext; <span style="color: #ff0000;">**public static List cookies;//此为保存的cookie**</span> public String cookieStr; // public static Cookie cookie = null; /** * 登陆时保存cookie * @param url * @param data * @return */ public String login(String url,String data[]){ HttpClient client = null; String html = null; try { client = new DefaultHttpClient(); <span style="color: #ff0000;">**// 创建cookie store的本地实例 CookieStore cookieStore = new BasicCookieStore(); localContext = new BasicHttpContext(); // 绑定定制的cookie store到本地内容中 localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); **</span> HttpPost post = new HttpPost(url); List parameters = new ArrayList(); parameters.add(new BasicNameValuePair("username", data[0])); parameters.add(new BasicNameValuePair("passwd", data[1])); parameters.add(new BasicNameValuePair("login", "%B5%C7%A1%A1%C2%BC")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,"utf-8"); post.setEntity(entity); HttpResponse response = client.execute(post<span style="color: #ff0000;">,localContext</span>); if(response.getStatusLine().getStatusCode() == 200){ InputStream content = response.getEntity().getContent(); BufferedReader buffer = new BufferedReader(new InputStreamReader(content,"gbk")); String line = null; while((line=buffer.readLine())!=null){ html+=line; } <span style="color: #ff0000;">** cookies = cookieStore.getCookies();**</span> System.out.println("cookies.size():"+cookies.size()); if (!cookies.isEmpty()) { for(int i=0;i&lt;cookies.size();i++){ system.out.println("-="" "+cookies.get(i).tostring());="" }="" buffer.close();="" }else{="" system.out.println("utilslogin:"+response.getstatusline().getstatuscode());="" catch="" (exception="" e)="" {="" e.printstacktrace();="" }finally{="" if(client!="null){" client.getconnectionmanager().shutdown();="" return="" html;="" }&lt;="" pre=""&gt; ...

2014年12月5日 · 2 分钟 · 天边的星星

关于android webview里HTML5的地理位置定位,在别的浏览器中打开可以定位,在我自己的webview却不能

我也遇到了同样的问题,我查看了下源码解决了,主要代码如下: //启用数据库 webSettings.setDatabaseEnabled(true); String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); //启用地理定位 webSettings.setGeolocationEnabled(true); //设置定位的数据库路径 webSettings.setGeolocationDatabasePath(dir); //最重要的方法,一定要设置,这就是出不来的主要原因 webSettings.setDomStorageEnabled(true) //配置权限(同样在WebChromeClient中实现) public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) { callback.invoke(origin, true, false); super.onGeolocationPermissionsShowPrompt(origin, callback); } 配置权限: &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;

2014年10月19日 · 1 分钟 · 天边的星星