Android WebView远端页面显示手机本地图片的方式

首先,必须要明确的就是,我这里说的Android WebView远端页面,指的是WebView. loadUrl( http://)这样的页面,这个是大前提!因为我是基于真实项目需求来的,真实项目应该不会使用loadUrl(android_set://file://)这样的加载本地文件的方式,如果你是这样的加载本地文件的方式,那我的方式也适合你。

回归正题。

WebView显示手机本地图片,使用的关键接口是WebViewClient类的shouldInterruptRequset(WebResponse,String)方法,以文件流的方式返回图片数据。需要注意的是,你要给这个接口中的图片名,增加一个模拟http的请求,比如你可以这样模拟一个http请求:http://xxx.xxx.xxx/+文件名(x代表英文字母)。

将上面的数据返回给远端页面,远端页面需要一个标签,提供src作为数据源,这样WebViewClient类的shouldInterruptRequest(WebResponse,String)方法才能执行。

需要注意的是,你需要提供sd卡访问权限。

容易犯错的地方,模拟文件名错误,未提供sd卡权限,图片类型(jpg,png)前后不一致。

另外如果你用的是X5 WebView,那么你模拟的http请求中,域名至少有一个“点”,否则shouldInrerruptRequst()方法不会执行。我原来模拟的请求是http://localhost/,这不是一个合格的请域名--域名中没有“点”,这样是不会执行的。

总结一下,提供sd卡权限,图片类型注意保持一致,检查文件名文件路径不要出错,模拟请求要有合格的域名,使用WebView Client类的shouldInterruptRequest()方法,远端页面提供标签src数据源,这样就可以在远端页面中显示本地手机图片了。

补充一下,为什么我不用base64数据的方式显示图片?因为base64只适合显示小图,而如果你要显示几百KB甚至上兆的图片,那很容易无法正常显示,因为base64是利用url传递数据,url传输的数据量是有大小上限的!你把上兆大小的数据传输到url中,这些数据超过了url传输的数据最大上限,自然就不行了。

纸上得来终觉浅,绝知此事要躬行。

你可能感兴趣的:(Android WebView远端页面显示手机本地图片的方式)