android下webview实现H5 html标签 input file类型文件多选 multiple 属性的支持
2020-02-05 05:41
2281 查看
android下webview实现H5 html标签 input file类型文件单选多选 multiple 属性的支持
资源有限 仅在华为手机上进行测试
[code]private final static int REQUEST_SELECT_FILE = 2; private final static int FILECHOOSER_RESULTCODE = 1; private ValueCallback<Uri[]> uploadMessage; //多选文件回调 private ValueCallback<Uri> mUploadMessage ; //单选文件回调 webView.setWebChromeClient(new WebChromeClient() { // For 3.0+ Devices (Start) protected void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType){ mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image"); startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE); } // For Lollipop 5.0+ Devices 目测应该5.0+才支持多选 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams){ if (uploadMessage != null) { uploadMessage.onReceiveValue(null); uploadMessage = null; } uploadMessage = filePathCallback; Intent intent = fileChooserParams.createIntent(); //此处增加参数 允许多选文件 intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE,true); try{ startActivityForResult(intent, REQUEST_SELECT_FILE); } catch (ActivityNotFoundException e){ uploadMessage = null; Toast.makeText(getBaseContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show(); return false; } return true; } //For Android 4.1 only protected void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){ mUploadMessage = uploadMsg; Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image"); startActivityForResult(Intent.createChooser(intent, "File Browser"), FILECHOOSER_RESULTCODE); } //for Android <3.0 protected void openFileChooser(ValueCallback<Uri> uploadMsg){ mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image"); startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE); } }); @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ if (requestCode == REQUEST_SELECT_FILE){ if (uploadMessage == null || intent == null) { //若没有选择文件就回退 执行清空 不进行这步操作无法再次选择文件 uploadMessage.onReceiveValue(null); uploadMessage = null; return; } //由于用户可能单选或多选 单选getData 多选时getClipData() if(intent.getData() != null){ uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent)); }else if(intent.getClipData() != null){ Uri[] uris = new Uri[intent.getClipData().getItemCount()]; for(int i=0;i<intent.getClipData().getItemCount();i++){ uris[i] = intent.getClipData().getItemAt(i).getUri(); } uploadMessage.onReceiveValue(uris); } uploadMessage = null; } }else if (requestCode == FILECHOOSER_RESULTCODE){ if (null == mUploadMessage || intent == null) { //若没有选择文件就回退 执行清空 不进行这步操作无法再次选择文件 mUploadMessage.onReceiveValue(null); mUploadMessage= null; return; } // Use MainActivity.RESULT_OK if you're implementing WebView inside Fragment // Use RESULT_OK only if you're implementing WebView inside an Activity Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData(); mUploadMessage.onReceiveValue(result); mUploadMessage = null; }else Toast.makeText(getBaseContext(), "Failed to Upload Image", Toast.LENGTH_LONG).show(); }
完善了 选择文件时 未选择文件 操作回退按钮 的支持
2019年1月4日
完善了 用户操作未选择文件 回退后无法再次选择文件的问题 主要是在onActivityResult内进行onReceiveValue(null)
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- Android:让WebView支持<input type="file"…>元素,实现文件上传
- Android学习之实现WebView中input="file"选择文件,处理选择图片无法返回类型问题
- Android WebView 不支持 H5 input type="file" 解决方法
- Android WebView 不支持 H5 input type="file" 解决方法
- Android WebView 不支持 H5 input type="file" 解决方法
- Android WebView 不支持 H5 input type="file" 解决方法
- Android WebView 支持H5图片上传<input type="file">
- android webview支持<input type="file"类型
- Android WebView嵌入H5之file头像上传文件,适配所有版本
- Android:让WebView支持<input type=”file”…>元素
- [Cordova/Phonegap] 改进InAppBrowser插件(WebView),让其<input type="file">支持选择文件
- Html+CSS input type=file 文件类型限制属性 accept (HTML 5)
- Android-WebView-解决对选择文件<input type="file">无响应
- Android:让WebView支持<input type=”file”…>元素
- WebView支持<input type="file">调起本地文件,获取图片
- Android WebView H5页面 input type =“file”解决方法
- Android:让WebView支持<input type=”file”…>元素 - GreatK
- Android-WebView支持input file启用相机/选取照片
- Android:让WebView支持<input type=”file”…>元素
- Android WebView支持input file启用相机/选取照片功能