您的位置:首页 > 移动开发 > Android开发

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐