WebView填坑——小功能篇

这两天负责修改了几个关于在webview中打开公司移动站的bug。本身不是很难解,网上查查都有,但是也有必要记录下来作为备忘。

Webview中上传文件

这里的效果类似在pc端上传文件效果,点击打开一个文件选择器,上传文件图片之类的。

openFileChooser()方法的重载是因为在不同系统中调用的方法参数不一样,具体看注释。

ValueCallback<Uri> mUploadMessage作为成员变量的目的是我们要在打开的系统文件选择器finish()后在onActivityResult()时调用。

具体实现代码如下:


private void initWebView(){
    webView.setWebChromeClient(new MyWebChromeClient());
}

 private ValueCallback<Uri> mUploadMessage;
private class MyWebChromeClient extends WebChromeClient {

    // js上传文件的<input type="file" />事件捕获
    // Android > 4.1.1 调用这个方法
    public 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(TextUtils.isEmpty(acceptType) ? "image/*" : acceptType);

      MobileSiteActivity.this.startActivityForResult(
          Intent.createChooser(intent, ToolBox.getString(R.string.web_activity_please_chooser)),
          MobileSiteActivity.FILECHOOSER_RESULTCODE);

    }

    // 3.0 + 调用这个方法
    public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
      openFileChooser(uploadMsg, acceptType, null);
    }

    // Android < 3.0 调用这个方法
    public void openFileChooser(ValueCallback<Uri> uploadMsg) {
      openFileChooser(uploadMsg, null);
    }
  }
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (FILECHOOSER_RESULTCODE == requestCode) {
      if (null == mUploadMessage) return;
      Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
      mUploadMessage.onReceiveValue(result);
      mUploadMessage = null;
      return;
    }
  }

WebView当中网页中的地图为白色,不显示地图

这个问题其实就是你没有打开Javascript支持。打开就好啦~

webView.setJavaScriptEnabled(true);// 设置支持javascript脚本

WebView中跳转系统拨号键盘

举一反三,既然要打开系统拨号键盘,那邮箱,地图也可以支持。

webView.setWebViewClient(new WebViewClient() {
      public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (url.startsWith("mailto:") || url.startsWith("geo:") || url.startsWith("tel:")) {
          Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
          startActivity(intent);
          return true;
        }
        view.loadUrl(url);
        return true;
      }
    });

WebView中支持下载

这里要给WebView设置一个下载监听,监听会回调给你下载地址,这里可以打开系统浏览器去激活下载,用DownloadManger直接去下载也可以,我选择的是第一种方式,这种方式我认为比较符合用户习惯哈。

 webView.setDownloadListener(new MyWebViewDownLoadListener());

 private class MyWebViewDownLoadListener implements DownloadListener {

    @Override
    public void onDownloadStart(String url, String userAgent, String contentDisposition,
        String mimetype, long contentLength) {

      if (null != url) {
        Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
      }
    }

  }
时间: 2024-10-07 07:43:13

WebView填坑——小功能篇的相关文章

Android WebView填坑记录

前言 在应用程序开发过程中,经常会采用webview来展现某些界面,这样就可以不受发布版本控制,实时更新,遇到问题可以快速修复. 但是在Android开发中,由于Android版本分化严重,每一个版本针对webview都有部分更改,因此在开发过程中会遇到各种各样的坑,因此在此总结一下在开发过程中遇到的一些坑! 样例 这里不是讲解怎么进行webview开发,而是只罗列其中遇到的一些坑!为了展示这些问题,我们还是写一个样例来进行展开. 样例代码: /** * WebView demo */ publ

flare的今生 挖坑 填坑小续...

ps:百度你咋还不死, 不信你搜索一个flare和google比一下, ps2:政府真是蛋疼,翻个墙很累. 吸一口气,贴一张图,翻过墙写的图片传不上去,不知51cto咋地了? 如果想要玩懂flare估计要懂memcache 废话不多少,不服你去百度. 地址: http://labs.gree.jp/Top/OpenSource/Flare/Document/Installation-en.html wget 'http://labs.gree.jp/data/source/flare-1.0.1

一名Android开发者的微信小程序填坑之路(2)

前言 上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天--当然是因为国庆节.说老实话,这十三天里面我都没有碰和小程序有关的东西--毕竟学习小程序的开发也只是起于兴趣,而平时的工作并不会涉及与其相关的东西--但是在这十三天里,我能明显的感受到小程序热正在逐渐的消退,或者说大家正在逐渐以一种较为平和的姿态接受它的存在,其实这是一件好事.期待公测的到来. 接下来我就直接进入正题了,另外,文末我想和大家分享一下我的国庆节. PS:这篇文章是接着上一篇文章 一名And

小程序项目之再填坑

简诉 是的,真的,你没有看错,我就是上次那个加薪的,但是现在问题来了,最近又搞了个小程序的需求,又填了不少坑,其中的辛酸就不说了,说多了都是泪,此处省略三千字 ---^--,说重点吧,反正最后就是差点这让老板叫走人了,你说优秀不优秀-. 前段时间网上一直说的"<你可以骂那些中年人,尤其是有车有房的-->",虽然我没有房.也没有车,但也坚决不做那个可以随便骂的中年人(人到中年不如狗??),不存在的啦,这个仇宝宝已经记下了,先分享一下最近遇到的几个坑吧. -- 我是首席填坑官-

Node学习笔记(四):gulp+express+io.socket部署angularJs2(填坑篇)

这篇就先暂停下上篇博客--你画我猜的进度,因为在做这个游戏的时候,想采用最新的ng2技术,奈何坑是一片又一片,这边就先介绍下环境部署和填坑史 既然要用ng2,首先要拿到资源,我这边用的是angularJs2 beta版的,网上的资源有两种,一个是文件全压缩版的.min.js版的另一个就是一大堆乱七八糟的js文件,主要是ng2已经完全采用TypeScript,加之对es6的支持,所以需要引入一大堆兼容,编译文件 这边刚好特别手欠想学学gulp,于是开搞配置gulp环境,压缩所有的js文件成一个mi

Jenkins+Ant+Jmeter 自动化性能测试平台之填坑篇

一.前言 搭建Jenkins+Ant+Jmeter 自动化性能测试平台过程中,坦白说遇到了很多坑...写这篇博文的目的,除了总结经验方便自己以后查阅之外,也为了方便他人遇到相同的坑时,可以快速找到原因并解决.下面开始我漫长的填坑之路~~ 二.填坑之路 1.build.xml中<project name="ant-jmeter-test" default="run" basedir=".">这行代码怎么理解? default:run为b

踩坑(Running)填坑(ZSSURE):DevExpress的XtraTabControl、Telerik的OpenAccessContext以及StarUML

题记: 今天好友在朋友圈分享了一篇有深度的好文"请鼓励你的孩子做个幸福普通人",文章略显长,细细品读下来感触颇多.加之最近天天看着小外甥大睿睿的一步步的成长,已渐渐远离年轻稚嫩.走向成熟稳重的我对学习有了新的认识,回想起自己的成长过程,经验和技能并非是父母手把手教导的,反而是他们给我营造的"自由.开放.甚至略显放纵"的环境.他们以身作则的行动,让我从中体会.感悟出了所有的点点滴滴. 说到现在从事的软件研发工作,想想同学中毕业鲜有留下来做技术的(姑且认为IT民工也属于

【结果很简单,过程很艰辛】记阿里云Ons消息队列服务填坑过程

Maybe 这个问题很简单,因为解决方法是非常简单,但填坑过程会把人逼疯,在阿里云ONS工作人员.同事和朋友的协助下,经过一天的调试和瞎捣鼓,终于解决了这个坑,把问题记下来,也许更多人在碰到类似问题的时候,会开放思路.当然不得不说,Ons的.NET接口还很不完善,甚至没有独立在Windos 2008/2012服务器测试过,希望官方加把力. 1.阿里云ONS介绍 ONS(Open Notification Service)即开放消息服务,是基于阿里开源消息中间件MetaQ(RocketMQ)打造的

iOS 网易彩票-5设置模块三(常用小功能)

该篇文章中,用到很多iOS开发过程中常用的小功能,当前只是将这些功能集成到网易彩票的设置中.iOS-常用小功能介绍,请参考我的另一篇文章: iOS 常用小功能 总结:http://www.cnblogs.com/jys509/p/4805030.html 关于 效果图 思路分析: 使用self.tableView.tableHeaderView 自定义组头部,通过加载xib来实现 评分支持,使用[iOS 常用小功能 总结]中“应用评分”小功能 客户电话,使用[iOS 常用小功能 总结]中“打电话