MPH5OpenFileChooserProvider 的使用
使用场景
在 H5 离线包中使用 <input type="file"/>
选择文件或者图片时,若不满足需求,可以使用自定义图片选择功能。如选择图片样式、可选多张图片、动态权限的处理等,推荐使用 MPH5OpenFileChooserProvider 来实现。
实现方式
在 mPaaS 初始化完成后的回调中注册 MPH5OpenFileChooserProvider。
H5Utils.setProvider(MPH5OpenFileChooserProvider.class.getName(), new MPH5OpenFileChooserProvider() { @Override public boolean needIntercept(Activity activity, ValueCallback valueCallback, boolean b, APFileChooserParams apFileChooserParams) { //不需要自定义图片选择功能时,不拦截 H5 容器,return false;默认不拦截 H5 容器 //需要自定义图片选择功能时,拦截 H5 容器,return true return true; } @Override public void openFileChooser(Activity activity, ValueCallback valueCallback, boolean b, APFileChooserParams apFileChooserParams) { // 拿到合法的 uri 给到前端 //必须调用该方法,若不调用,下次点击回调不执行 //1.通过intent打开一个Activity,调用系统相册或者拍照 //2.拿到选择后的图片 //3.关闭页面通过valueCallback,传递给前端 valueCallback.onReceiveValue(xx); } });
重要valueCallback.onReceiveValue(xx)
函数必须调用,若不调用,下次点击回调不执行。在回调函数 openFileChooser 中选择图片进行处理。
通过 intent 打开一个 Activity,调用系统相册或者拍照。
获取选择后的图片。
关闭打开的 Activity,通过 valueCallback 传递图片给前端。
参考方案
方案一
在 openFileChooser 的回调方法中注册广播接收者。
在 openFileChooser 方法中通过 Intent 跳转到自己创建的 Activity。
调用系统的拍照/图片选择 SDK(可以进行扩展如图片裁剪等功能)。
通过图片选择 Activity 获取到最终的选择图片, 发送广播到 openFileChooser 回调的广播监听者,关闭 Activity 页面。
通过 webview 系统的 valueCallback.onReceiveValue(xx) 传递给前端。
方案二
在 openFileChooser 方法中通过 Intent 跳转到一个 Activity,并将 valueCallback 传递给 Activity。
调用系统的拍照/图片选择 SDK(可以进行扩展如图片裁剪等功能)。
通过 webview 系统的 valueCallback.onReceiveValue(xx) 传递给前端 。
关闭 Actiity 页面 。