全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android 解决WebView无法上传文件的问题

Android 解决WebView无法上传文件的问题

Android原生的WebView并不支持上传文件,需要我们自己实现相应的方法。于是我把工作中的相关代码记录下来。下次直接拿来用就行了。一点一滴都是经验。

1。需要定义三个变量

 private ValueCallback<Uri[]> uploadMessageAboveL;
  private final static int FILE_CHOOSER_RESULT_CODE = 10000;
  private ValueCallback<Uri> uploadMessage;

2.重写Activity相关方法

  private void openImageChooserActivity() {
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.addCategory(Intent.CATEGORY_OPENABLE);
    i.setType("image/*");
    startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILE_CHOOSER_RESULT_CODE);
  }


  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == FILE_CHOOSER_RESULT_CODE) {
      if (null == uploadMessage && null == uploadMessageAboveL) return;
      Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
      if (uploadMessageAboveL != null) {
        onActivityResultAboveL(requestCode, resultCode, data);
      } else if (uploadMessage != null) {
        uploadMessage.onReceiveValue(result);
        uploadMessage = null;
      }
    }
  }


  @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  private void onActivityResultAboveL(int requestCode, int resultCode, Intent intent) {
    if (requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL == null)
      return;
    Uri[] results = null;
    if (resultCode == Activity.RESULT_OK) {
      if (intent != null) {
        String dataString = intent.getDataString();
        ClipData clipData = intent.getClipData();
        if (clipData != null) {
          results = new Uri[clipData.getItemCount()];
          for (int i = 0; i < clipData.getItemCount(); i++) {
            ClipData.Item item = clipData.getItemAt(i);
            results[i] = item.getUri();
          }
        }
        if (dataString != null)
          results = new Uri[]{Uri.parse(dataString)};
      }
    }
    uploadMessageAboveL.onReceiveValue(results);
    uploadMessageAboveL = null;
  }

3.重写WebChromeClient中的相关方法

 // For Android < 3.0
    public void openFileChooser(ValueCallback<Uri> valueCallback) {
      uploadMessage = valueCallback;
      openImageChooserActivity();
    }

    // For Android >= 3.0
    public void openFileChooser(ValueCallback valueCallback, String acceptType) {
      uploadMessage = valueCallback;
      openImageChooserActivity();
    }

    //For Android >= 4.1
    public void openFileChooser(ValueCallback<Uri> valueCallback, String acceptType, String capture) {
      uploadMessage = valueCallback;
      openImageChooserActivity();
    }

    // For Android >= 5.0
    @Override
    public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
      uploadMessageAboveL = filePathCallback;
      openImageChooserActivity();
      return true;
    }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # WebView  # 解决WebView无法上传文件  # webView上传文件  # Android中的webview支持页面中的文件上传实例代码  # Android WebView那些坑之上传文件示例  # Android WebView 上传文件支持全解析  # 浅谈关于Android WebView上传文件的解决方案  # 重写  # 上传文件  # 都是  # 我把  # 希望能  # 谢谢大家  # 来用  # 下次  # 就行了  # addCategory  # ACTION_GET_CONTENT  # setType  # CATEGORY_OPENABLE  # Intent  # Activity  # openImageChooserActivity  # void  # protected  # Override  # onActivityResult 


相关文章: 广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何通过VPS建站无需域名直接访问?  如何用虚拟主机快速搭建网站?详细步骤解析  建站之星2.7模板快速切换与批量管理功能操作指南  c++怎么用jemalloc c++替换默认内存分配器【性能】  建站主机是什么?如何选择适合的建站主机?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何快速生成凡客建站的专业级图册?  html制作网站的步骤有哪些,iapp如何添加网页?  如何通过WDCP绑定主域名及创建子域名站点?  长沙做网站要多少钱,长沙国安网络怎么样?  清除minerd进程的简单方法  无锡营销型网站制作公司,无锡网选车牌流程?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星如何修改网站生成路径?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  测试制作网站有哪些,测试性取向的权威测试或者网站?  网站app免费制作软件,能免费看各大网站视频的手机app?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  Python lxml的etree和ElementTree有什么区别  IOS倒计时设置UIButton标题title的抖动问题  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  Python多线程使用规范_线程安全解析【教程】  制作网站的模板软件,网站怎么建设?  如何选择建站程序?包含哪些必备功能与类型?  如何快速搭建个人网站并优化SEO?  免费视频制作网站,更新又快又好的免费电影网站?  Android自定义listview布局实现上拉加载下拉刷新功能  制作网站外包平台,自动化接单网站有哪些?  如何在阿里云购买域名并搭建网站?  javascript中的try catch异常捕获机制用法分析  Android自定义控件实现温度旋转按钮效果  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  如何快速建站并高效导出源代码?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  ,石家庄四十八中学官网?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  建站之星后台管理系统如何操作?  动图在线制作网站有哪些,滑动动图图集怎么做?  如何挑选优质建站一级代理提升网站排名?  如何通过云梦建站系统实现SEO快速优化?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  专业商城网站制作公司有哪些,pi商城官网是哪个?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  招商网站制作流程,网站招商广告语?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  导航网站建站方案与优化指南:一站式高效搭建技巧解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。