H5页面打开android本地照册,当webview页面被系统回收的情况下,如何处理图片

来源:互联网 发布:合肥软件开发待遇 编辑:程序博客网 时间:2024/04/28 20:45

一、现象描述:

       报告单上传图片功能打开照相机拍照后,图片无法显示
二、问题原因:
       报告单上传图片的时候,对应流程是这样:
       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(filePathuriString);
是通过JSBridage通知到的H5.


0 0