android webview 运用小结(选取图片,js调用,混淆保留,cookie问题,高低版本问题)

由于项目需求,对webview要进行大量运用,所以对webview进行了一番学习与研究。废话不多说,直接按流程进行。

首先,关于webview的基本的内容,简单描述一下,作为记录。

    1、关于返回上个页面:重写一下 onKeyDown() 或者 onKeyUp() ,处理 keyCode == KeyEvent.KEYCODE_BACK 的情况,判断一下 webview.canGoBack(),根据需要处理即可。

    2、关于  setWebViewClient()  和  setWebChromeClient() 的运用。

         WebViewClient主要帮助WebView处理各种通知和事件,可以根据提供的一些方法加载我们需要的展示以及错误时的处理。常用到的方法:onPageStart(),onPageFinish(),onReceiveError(),shouldOverrideUrlLoading()等。

         WebChromeClient主要帮助WebView处理Javascript的对话框、网站图标、当前页面的title、加载进度等。常用的方法:onReceivedTitle,onJsAlert(WebView view, String url, String message, JsResult result)  /** 覆盖默认的window.alert展示界面,避免title里显示为“:来自file:////”  */ ,  onJsConfirm(),    onJsPrompt()    onProgressChanged()等,都是重写的,参数没加。


其他,说一些用到的新东西(对我来说是新的)。

第一,webview通过特定的url加载本地内容,包括与第三方浏览器合作的一些功能,(之前合作用到,记录一下),下面是希望的效果:

android webview 运用小结(选取图片,js调用,混淆保留,cookie问题,高低版本问题)_第1张图片

实现,根据自定义协议,比如:test://abc,然后通过shouldOverrideUrlLoading()拦截处理即可。比如自定义的:test://gotosearch?input=123,可以加载本地的搜索功能,并把用户在html里输入的内容 123 带过来。

第二,关于加载本地图片的问题,这个问题让我纠结了好久,下面简单描述下。

webview加载本地图片功能,网上搜索有很多,不过说的都差不多,都是WebChromeClient 下的 openFileChooser(),针对不同的版本重构了几个出来而已。但是经过我反复的测试和网上资料的查阅,发现在4.4以后,这个方法不能被使用了,(也可能是我没找到,如果有遇到的可以给我留言,感激),后来进过一段时间的研究,只能采用了先通过js调用选择图片功能,然后上传图片的方法实现期望的功能。这个涉及到一个js调用的细节问题,也是困扰了我们好长时间,在js调用选取图片的时候,刚开始都成功了,没什么问题,后来服务器的兄弟改了一下js方法(这个是后来发现的,原来就是方法名的问题),导致js调用无效。后来反复的撤销更改,发现是服务器的js里,调用的方法名必须是onClick()。这样的事情真的让人恼火。=至于java调用html,就很简单了。

第三,关于cookie的问题。由于我们涉及到账号的切换,在服务器的同事清除了cookie后,但是app上依然保留,经过查找相关资料,记录一下cookie清除的方法。

            @SuppressWarnings("unused")
            CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(this);
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.removeAllCookie();

经过我的测试,好像需要webview destroy()一下才能起作用,暂时没有比较好的处理,能解决问题,但是不够完美,回头要在研究下。(希望对此有研究的朋友可以说一下)。

第四,关于混淆的问题。

当这一切都搞定了,我们准备上线的时候,发现又不能用了,瞬间有种疯掉的感觉。通过查看日志,发现不能调用的原因很简单,找不到对应的方法,那肯定是混淆的问题了,关于混淆,这个不赘述,随便查一下就一大堆。我这里只作为我用到的记录一下。

-keep class com.yourpackagename.WebActivity$*{*;}

至此,基本问题都搞定,可以上线了。

( 此篇文章只作为个人总结,里面如果有不对的地方,还请各位大神指正,感激不尽 )


你可能感兴趣的:(android,cookie,webView,混淆,自定义协议)