WebView实现html文件选择(input type=file),兼容安卓6.0

</pre>    最近项目开发使用到了html和java混合开发,开发中也遇到了很多问题,经过各方查询资料和查看源码,终将问题解决。所以决定在这儿把学习到的经验与大家分享,以免大家再在此类问题上浪费太多时间。<p></p><p><span style="white-space:pre"></span>首先,关于webview支持文件选择的解决办法网上已经有很多了。但是我今天要说的是更高版本的安卓怎么兼容文件选择。网上说的文件选择,普遍是兼容安卓4.4及以下的,而且也确实是可行的。</p><p><span style="white-space:pre"></span>一般处理文件下载只需要继承系统提供的WebChromeClient,重写<span style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">openFileChooser方法,但是为了兼容安卓4.4及以下版本通常写法如下:</span></p><p><span style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto"></span></p><pre name="code" class="java">wv.setWebChromeClient(new CustomChromeClient("HostApp",
                HostJsScope.class) {
            // For Android 3.0+ 文件选择
            public void openFileChooser(ValueCallback<Uri> uploadMsg,
                    String acceptType) {
                if (mUploadMessage != null)
                    return;
                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("*/*");
                startActivityForResult(Intent.createChooser(i, "文件选择"),
                        Constant.COMMON_REQUEST_CODE);
            }

            // For Android < 3.0
            public void openFileChooser(ValueCallback<Uri> uploadMsg) {
                openFileChooser(uploadMsg, "");
            }

            // For Android > 4.1.1
            public void openFileChooser(ValueCallback<Uri> uploadMsg,
                    String acceptType, String capture) {
                openFileChooser(uploadMsg, acceptType);
            }
});
但是这样的做法只能兼容到安卓4.4左右。实际测试发现安卓5.0及以上版本中,此方法无法实现文件选择的调用。原因是新的api取消了openFileChooser方法。通过查看5.0以上sdk发现,取而代之的是showFileChooser方法:
<pre name="code" class="java">// For Android > 4.4 为了支持安卓5.0和6.0等高版本系统
			@Override
			public boolean onShowFileChooser(WebView webView,
					ValueCallback<Uri[]> filePathCallback,
					FileChooserParams fileChooserParams) {
				if (mUploadMessages != null)
					return false;
				mUploadMessages = filePathCallback;
				Intent i = new Intent(Intent.ACTION_GET_CONTENT);
				i.addCategory(Intent.CATEGORY_OPENABLE);
				i.setType("*/*");
				startActivityForResult(Intent.createChooser(i, "文件选择"),
						Constant.COMMON_REQUEST_CODE);
				return true;
			}


 这里有一点大家需要注意, 
openFileChooser

方法大家在方法重写清单里面是看不到的,原因是sdk里面将此方法标记为了@hide,通常标记了这个就意味着安卓不建议你重写,可能是不稳定还是什么原因吧。但是这不影响你重写此方法。但是到了高版本的安卓sdk中,你会发现此方法过时了:


取而代之的是它:


但是前提是你的sdk版本要是5.0以上哦,不然没有这个方法。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值