使用场景
在 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)
传递给前端 。关闭
Activity
页面 。