作者:顆顆顆顆幸福_483 | 来源:互联网 | 2023-07-19 13:54
公司的移动端使用的是web,通过Crosswalk替代webview进行加载访问,以提高效率。最近公司进入第三方客服系统,分别针对pc端和手机端有不同的页面。其中在手机页面上有发送表
公司的移动端使用的是web,通过Crosswalk替代webview进行加载访问,以提高效率。最近公司进入第三方客服系统,分别针对pc端和手机端有不同的页面。其中在手机页面上有发送表情和图片功能,表情功能正常,选择图片在微信中正常,app中出现点击无反应。最开始通过网络查找资料,发现关于Crosswalk的资料非常少。无奈之下只能翻看源码。发现有XWalkUIClient类中有和webview中的openFileChooser方法。于是抱着试一试的心态重写了该方法,进行测试发现点击会执行,于是按照处理webview中处理选择文件的方式实现了一遍。成功解决这个问题。由于资料较少,特写一篇记录。以下是实现内容
一、定义两个全局变量
private ValueCallback mUploadMessage;
private final int FILE_SELECTED = 10000;
二、重写XWalkUIClient的openFileChooser方法
@Override
public void openFileChooser(XWalkView view, ValueCallback uploadFile, String acceptType, String capture) {
super.openFileChooser(view, uploadFile, acceptType, capture);
if (mUploadMessage != null) return;
mUploadMessage = uploadFile;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("*/*");
MainActivity.this.startActivityForResult(Intent.createChooser(i, "选择图片"), FILE_SELECTED);
}
三重写Activity的onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mXWalkView != null) {
mXWalkView.onActivityResult(requestCode, resultCode, data);
}
if(requestCode==FILE_SELECTED) {
if (null == mUploadMessage) return;
Uri result = data == null || resultCode != RESULT_OK ? null
: data.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
return;
}
}