webView上傳文件就不多說(shuō),上代碼
webview.setWebChromeClient(new WebChromeClient() {
// For Android < 3.0
public void openFileChooser(ValueCallback<Uri> valueCallback) {
***
}
// For Android >= 3.0
public void openFileChooser(ValueCallback valueCallback, String acceptType) {
***
}
//For Android >= 4.1
public void openFileChooser(ValueCallback<Uri> valueCallback,
String acceptType, String capture) {
***
}
// For Android >= 5.0
@Override
public boolean onShowFileChooser(WebView webView,
ValueCallback<Uri[]> filePathCallback,
WebChromeClient.FileChooserParams fileChooserParams) {
***
return true;
}
});
文件選擇完成之后的回調(diào),此處是上傳照片的例子
/***
* 文件選擇的回調(diào)
* @param list
*/
public void setChooseFile(ArrayList<TImage> list) {
KLog.e(TAG, "webfragment中回調(diào)了圖片:" + list.size());
Uri[] results = null;
Uri uriResult = null;
if (null != list && list.size() > 0) {
TImage tImage = list.get(0);
//取到壓縮后的圖
String compressPath = tImage.getCompressPath();
results = new Uri[]{Uri.fromFile(new File(compressPath))};
uriResult = Uri.fromFile(new File(compressPath));
}
if (null != uploadMessageAboveL) {
uploadMessageAboveL.onReceiveValue(results);
} else if (null != mValueCallback) {
mValueCallback.onReceiveValue(uriResult);
}
}
但是有時(shí)候我們點(diǎn)擊了上傳按鈕,但是沒(méi)有上傳任何文件就退出了,這時(shí)候就會(huì)出現(xiàn)再次點(diǎn)擊上傳按鈕,不顯示讓選擇文件的彈窗(比如上傳照片時(shí),不顯示從相冊(cè)選取還是拍照獲取的dialog),解決辦法如下:
將選擇文件的回調(diào)全部設(shè)置成null
/***
* 文件選擇彈框取消時(shí)回調(diào)
* 解決彈框二次不彈出的問(wèn)題
*/
public void cancleChooseFileDialog() {
if (null != uploadMessageAboveL) {
uploadMessageAboveL.onReceiveValue(null);
uploadMessageAboveL = null;
}
if (null != mValueCallback) {
mValueCallback.onReceiveValue(null);
mValueCallback = null;
}
}
這個(gè)方法,我們?cè)赿ialog的cancle回調(diào)里面去調(diào)用,另外,記得將這個(gè)dialog設(shè)置成只能點(diǎn)擊cancle取消的模式,否則會(huì)出現(xiàn)點(diǎn)擊dialog以外的部分,dialog消失,但是這個(gè)回調(diào)沒(méi)有執(zhí)行的情況