默认的情况下在HTML中 写

<input type=file />

的时候回弹出选择文件的窗口,但实际上在webview中默认的是不弹出窗口的

解决方法

在WebChromeClient中增加一些方法:

webView.setWebChromeClient(new WebChromeClient(){//For Android 3.0+public void openFileChooser(ValueCallback<Uri> uploadMsg){mUM = uploadMsg;Intent i = new Intent(Intent.ACTION_GET_CONTENT);i.addCategory(Intent.CATEGORY_OPENABLE);i.setType("*/*");MainActivity.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FCR);}// For Android 3.0+, above method not supported in some android 3+ versions, in such case we use thispublic void openFileChooser(ValueCallback uploadMsg, String acceptType){mUM = uploadMsg;Intent i = new Intent(Intent.ACTION_GET_CONTENT);i.addCategory(Intent.CATEGORY_OPENABLE);i.setType("*/*");MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),FCR);}//For Android 4.1+public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture){mUM = uploadMsg;Intent i = new Intent(Intent.ACTION_GET_CONTENT);i.addCategory(Intent.CATEGORY_OPENABLE);i.setType("*/*");MainActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), MainActivity.FCR);}//For Android 5.0+public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback,WebChromeClient.FileChooserParams fileChooserParams){if(mUMA != null){mUMA.onReceiveValue(null);}mUMA = filePathCallback;Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);if(takePictureIntent.resolveActivity(MainActivity.this.getPackageManager()) != null){File photoFile = null;try{photoFile = createImageFile();takePictureIntent.putExtra("PhotoPath", mCM);}catch(IOException ex){Log.e(TAG, "Image file creation failed", ex);}if(photoFile != null){mCM = "file:" + photoFile.getAbsolutePath();takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));}else{takePictureIntent = null;}}Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);contentSelectionIntent.setType("*/*");Intent[] intentArray;if(takePictureIntent != null){intentArray = new Intent[]{takePictureIntent};}else{intentArray = new Intent[0];}Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);startActivityForResult(chooserIntent, FCR);return true;}});

增加方法:

 // Create an image fileprivate File createImageFile() throws IOException{@SuppressLint("SimpleDateFormat") String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());String imageFileName = "img_"+timeStamp+"_";File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);return File.createTempFile(imageFileName,".jpg",storageDir);}

重写方法:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent intent){super.onActivityResult(requestCode, resultCode, intent);if(Build.VERSION.SDK_INT >= 21){Uri[] results = null;//Check if response is positiveif(resultCode== Activity.RESULT_OK){if(requestCode == FCR){if(null == mUMA){return;}if(intent == null){//Capture Photo if no image availableif(mCM != null){results = new Uri[]{Uri.parse(mCM)};}}else{String dataString = intent.getDataString();if(dataString != null){results = new Uri[]{Uri.parse(dataString)};}}}}mUMA.onReceiveValue(results);mUMA = null;}else{if(requestCode == FCR){if(null == mUM) return;Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();mUM.onReceiveValue(result);mUM = null;}}}

有些变量事先声明:

  private static final String TAG = MainActivity.class.getSimpleName();private String mCM;private ValueCallback<Uri> mUM;private ValueCallback<Uri[]> mUMA;private final static int FCR=1;

测试

成功!!

Android webview Input type=file 文件上传 解决方法相关推荐

  1. html input type=file 文件上传; 图片上传; 图片闪烁

    (1)input file 对话框和 获取选中文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  2. 监听input type=file 文件上传取消事件

    在做项目的时候,需要根据是否上传图片,(前提是已经上传文件,再次上传取消时,监听取消事件)进而判断页面变化.通过查阅相关资料,发现chane事件并不能监听取消,于是从另外一种角度:判断上传的文件是否有 ...

  3. input[type=file] 异步上传文件

    背景 UI如图所示,其中有一个拍照图标,点击后要选择拍照或者从相册中选择要上传的图片. 拍照上传部分的代码如下 html部分 <div class="take-photo"& ...

  4. html <input type=file>上传文件时,accept属性值汇总,支持文件格式,限制文件格式,限制上传图片的格式

    限制文件格式  一.示例标签1: <input type="file" accept="image/*" /> accept属性说明: image表 ...

  5. input type=file 实现上传、预览、删除等功能

    不知何时,突然对上传文件按钮起了浓厚的兴趣,当然这源于工作的需要.当时为了顺利上线,索性直接引用了jQuery的一个上传组件,简单粗暴. 后来闲下来,就对这个进行了一番研究,然后做了一个简单的Demo ...

  6. type=file文件上传H5新特性

    1.语法 <input name="myFile" type="file"> 2.属性(以下三个仅 HTML5支持,因此存在兼容性问题 ) (1)m ...

  7. input type=file图片上传时,先预览

    <label><input type="file" id="upload"> </label> js $("#up ...

  8. 解决利用<input type=“file“>上传文件时,value拿到的是fakePath问题

    问题:上传文件之后,直接获取input.value是fakePath路径,因此不能通过此路径访问到文件 解决方案: 若不想修改系统配置,可利用js代码解决 oInputFile.onchange = ...

  9. Android 上传图片到服务器(多文件上传)

    Android客户端的UI与<Android 上传图片到服务器(单文件上传)>唯一区别增加了多文件上传的功能. 1.Android客户端多文件上传核心代码: * 多文件上传* @param ...

最新文章

  1. Spring-boot+Vue = Fame 写blog的一次小结
  2. SpringBoot配置文件YAML
  3. 使用dispatch_group来进行线程同步
  4. hibernate多对一单向外键
  5. python中的随机函数random
  6. linux multipath.log,Linux Multipath配置
  7. ElasticSearch配置说明
  8. Varnish 503错误
  9. php使用file_get_contents 或者curl 发送get/post 请求 的方法总结
  10. JSP的表单回显实现
  11. [开源] PLC梯形图转指令表的算法源代码
  12. 阿里云服务器配置docker及其使用
  13. Maven配置错误: The JAVA_HOME environment variable is not defined correctly
  14. finecms相关信息-随时更新
  15. aws cloudformation 堆栈集的创建和使用
  16. 无线通信中比bit更小的“”数据单位”码片(也叫码元 ,chip) 什么是符号速率
  17. 汇编语言(王爽)期末复习
  18. 【Java 设计模式】UML 之类图
  19. 如何将QQLive和QQ2010和虚拟光驱运行在ubuntu上
  20. pandas 玩转 Excel 操作总结

热门文章

  1. 电脑软件测试英雄联盟,lol电脑配置检测,如何测试自己的网络玩lol的具体情况?...
  2. 数据分析师的岗位要求和工作流程
  3. 江涛带你玩STM-CubeMx之OLED使用3线SPI和4线SPI驱动详解
  4. 2020强网杯部分题目复现
  5. python ocr中文训练_cnocr: cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用...
  6. 企业中了勒索病毒该怎么办?可以解密吗?
  7. python如何计算个人gpa_GPA计算Python
  8. 浅谈这半年的实习感想
  9. ES的mapping配置详解
  10. python中mapping_python-学习-ORM中遇到的 mapping 详解并再总结字典dict