H5页面打开android本地照册,当webview页面被系统回收的情况下,如何处理图片
2017-04-11 12:02
821 查看
一、现象描述:
报告单上传图片功能打开照相机拍照后,图片无法显示
二、问题原因:
报告单上传图片的时候,对应流程是这样:
webview打开页面------->打开照相机----->裁剪压缩-----回到webview页面通知H5
如果打开照相机的时候,webview页面被回收,那么回到webview页面时,就通知不到H5了。
这个问题如果都是在客户端的话是可以处理的。(如之前的发成长),但现在这个页面是H5的。所以需要
H5端配合处理。
三、解决方案一:
如果webview页面被回收,webview会自动重启,在H5页面加载完成的时刻,由客户端调用H5接口
onRestoreImage(),H5端进行点击事件的模拟。然后客户端直接将上次选好图的URI通过回调方法传递给H5
具体做法:
客户端:webview会自动重启,在H5页面加载完成的时刻,由客户端调用H5接口
onRestoreImage()。
等到H5端完成点击事件的模拟后,客户端在onOpenFielChooser中将上次选好图的URI通过回调传递给H5。
H5端:在 onRestoreImage接口被触发的时候,模拟选图的点击事件即可。
解决方案二:
我们知道H5打开相册时,会触发webchromeclient的openFileChooser回调。
待客户端获取到本地相册后,将URI通过ValueCallback回调传递给H5。
问题来了,当webview页面被回收后,openFileChooser不会被触发,那么如果知道ValueCallback的回调都处理了哪些事情,然后模拟即可。
为些调研源码。
H5调用系统相册时,先调到下面的方法:
然后找到获得URI的callbackproxy 类,再看一下;
红线部分的处理就是 回调JAVA层的openfileChooser的代码。
重点在这里如下:
BrowserFrame.sJavaBridge.storeFilePathForContentUri(filePath, uriString);
是通过JSBridage通知到的H5.
报告单上传图片功能打开照相机拍照后,图片无法显示
二、问题原因:
报告单上传图片的时候,对应流程是这样:
webview打开页面------->打开照相机----->裁剪压缩-----回到webview页面通知H5
如果打开照相机的时候,webview页面被回收,那么回到webview页面时,就通知不到H5了。
这个问题如果都是在客户端的话是可以处理的。(如之前的发成长),但现在这个页面是H5的。所以需要
H5端配合处理。
三、解决方案一:
如果webview页面被回收,webview会自动重启,在H5页面加载完成的时刻,由客户端调用H5接口
onRestoreImage(),H5端进行点击事件的模拟。然后客户端直接将上次选好图的URI通过回调方法传递给H5
具体做法:
客户端:webview会自动重启,在H5页面加载完成的时刻,由客户端调用H5接口
onRestoreImage()。
等到H5端完成点击事件的模拟后,客户端在onOpenFielChooser中将上次选好图的URI通过回调传递给H5。
H5端:在 onRestoreImage接口被触发的时候,模拟选图的点击事件即可。
解决方案二:
我们知道H5打开相册时,会触发webchromeclient的openFileChooser回调。
待客户端获取到本地相册后,将URI通过ValueCallback回调传递给H5。
问题来了,当webview页面被回收后,openFileChooser不会被触发,那么如果知道ValueCallback的回调都处理了哪些事情,然后模拟即可。
为些调研源码。
H5调用系统相册时,先调到下面的方法:
然后找到获得URI的callbackproxy 类,再看一下;
红线部分的处理就是 回调JAVA层的openfileChooser的代码。
重点在这里如下:
BrowserFrame.sJavaBridge.storeFilePathForContentUri(filePath, uriString);
是通过JSBridage通知到的H5.
相关文章推荐
- Android用webView加载h5的页面,h5获取本地的图库中的图片
- Android 真机,微信打开 H5,切换到 webview,能通过 webdriver 方法操作页面元素,然后链接到新的 H5 页面后,无法操作元素,appium 服务器没有收到 response,
- android原生WebView打开h5页面加载显示不完整错乱问题
- android webview打开本地图片上传
- Android webview如何打开本地存储,提供给JS调用html5的lwindow.localStorage功能
- 如何处理android程序变为后台程序,系统回收资源,再次打开时,程序因为null指针等崩溃
- [android开发]WebView如何获得正在打开页面的进度?
- Android 7.0系统webview 显示https页面空白处理方法
- Android webview如何打开本地存储,提供给JS调用html5的lwindow.localStorage功能
- android webview 加载H5页面,设置字体不随系统设置变化
- 如何处理android程序变为后台程序,系统回收资源,再次打开时,程序因为null指针等崩溃
- Android 7.0系统webview 显示https页面空白处理
- Android【WebView】 防止调用系统浏览器打开页面 看了好多朋友写的代码我在整理了
- android Webview打开、上传本地图片的解决方案 支持到5.0
- Android webview打开本地图片上传实现代码
- Android之WebView 防止调用系统浏览器打开页面
- 如何解决Android不同系统版本WebView上传图片的bug
- 微信webview中以图片相册形式打开页面中图片
- Android WebView自定义处理错误页面显示(404等)
- android webview 网络页面从本地(assets)加载js库