android系统webview最新版本_webview加载h5页面空白

android系统webview最新版本_webview加载h5页面空白做android聊天时,遇到过一个问题,h5的页面发送的图片在android端不能响应,ios那边一路畅通。也是相当无奈,目前发现了好多android端与ios端webView的异同。android端与ios确的不同大致包括:1:android不能直接打开html的下载文件,需要先下载保存本地在打开本地文件2:android不能直接打开pdf文件,同样要下载再打开3:如题,h5页面的发送图片按钮点…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

做android聊天时,遇到过一个问题,h5的页面发送的图片在android端不能响应,ios那边一路畅通。也是相当无奈,目前发现了好多android端与ios端webView的异同。

android端与ios确的不同大致包括:

1:android不能直接打开html的下载文件,需要先下载保存本地在打开本地文件

2:android不能直接打开pdf文件,同样要下载再打开

3:如题,h5页面的发送图片按钮点击没反应,ios却可以

4:android可以postUrl,ios不行,需要js混合开发

下面简单说下第三点。

1:出现的原因:

H5 访问本地文件的时候,使用的 ,WebView 出于安全性的考虑,限制了以上操作

2:解决方法

重写 WebviewChromeClient 中的 openFileChooser() 和 onShowFileChooser()方法响应,然后使用原生代码来实现调用本地相册和拍照的功能,最后在 onActiivtyResult 把选择的图片 URI 回传给 WebviewChromeClient。

3:大致步骤

1.弹出对话框选择相机或相册

2.调用系统相册的实现代码

3.调用系统相机拍照的实现代码

4.需要兼容 6.0 的动态权限问题和 7.0 的文件管理问题。

5.相机拍照后的图片上传后要进行删除,以免占用手机存储空间

chatWebView.setWebChromeClient(new WebChromeClient() {

@Override

public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {

Log.d(“ChatFragment”, “filePathCallback>>>>>” + filePathCallback);

mUploadCallbackAboveL = filePathCallback;

uploadPicture();

return true;

}

//For Android >= 4.1

public void openFileChooser(ValueCallback valueCallback, String acceptType, String capture) {

mUploadMessage = valueCallback;

//调用系统相机或者相册

uploadPicture();

}

}

);

upload()方法是打开打开相册等系列操作,常规操作就省略了,其中两个参数mUploadMessage和mUploadCallbackAboveL是用来处理获取图片等文件的Uri之后传递给Js操作的。之后再onActivityResult()方法里处理结果

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

case CHOOSE_PHOTO:

if (resultCode == RESULT_OK) {

Uri uri = data.getData();

if (uri != null) {

uploadImage(uri);

}

} else{

uploadImage(null);

}

break;

case TAKE_PHOTO:

if (resultCode == RESULT_OK) {

Uri uri = Uri.fromFile(mTmpFile);

if (uri != null) {

uploadImage(uri);

}

}else{

uploadImage(null);

}

break;

default:

break;

}

}

private void uploadImage(Uri uri) {

if (mUploadMessage != null) {

mUploadMessage.onReceiveValue(uri);

mUploadMessage = null;

}

if (mUploadCallbackAboveL != null) {

if(uri!=null){

mUploadCallbackAboveL.onReceiveValue(new Uri[]{uri});

}else{

mUploadCallbackAboveL.onReceiveValue(null);

}

mUploadCallbackAboveL = null;

}

}

upLoadImage(Uri uri)方法是将图片传递给JS,之后的逻辑交给Js处理。注意取消选择文件操作的时候同样要调该方法,但是参数传null.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190619.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DNS服务器fe80_无法访问dns域名服务器

    DNS服务器fe80_无法访问dns域名服务器服务器dns地址fec0内容精选换一换Atlas200DK开发者板支持通过USB端口或者网线与Ubuntu服务器进行连接,连接示例图如图1所示。Atlas200DK连接Ubuntu服务器有以下场景:使用USB连接线通过USB端口与Ubuntu服务器直连,请参考通过USB端口直连Ubuntu服务器。此种场景下,Atlas200DK不方便接入网络,仅适用于与Ubunt创建子网。您可以在A…

    2022年8月11日
  • CentOS 中用 Yum 安装、卸载软件

    CentOS 中用 Yum 安装、卸载软件一:Yum简介Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。二:常用的Yum命令1、显示已经安装的软件包yumlist…

    2022年6月11日
  • linux重启tomcat进程,Linux系统重启tomcat服务的方法详解「建议收藏」

    Linux系统下tomcat服务的重启需要通过命令来解决。下面由学习啦小编为大家整理了Linux系统重启tomcat服务的方法详解,希望对大家有帮助!Linux系统重启tomcat服务的方法详解一在Linux系统下,重启Tomcat使用命令操作的!首先,进入Tomcat下的bin目录cd/usr/local/tomcat/bin使用Tomcat关闭命令./shutdown.sh查看Tomcat是…

    2022年4月7日
  • 小米手机与魅族的PK战结果 说明了什么

    小米手机与魅族的PK战结果 说明了什么

    2022年1月29日
  • Python画图之浪漫樱花

    Python画图之浪漫樱花importturtleasTimportrandomimporttime#画樱花的躯干(60,t)defTree(branch,t):time.sleep(0.0005)ifbranch>3:if8<=branch<=12:ifrandom.randint(0,2)…

    2022年6月10日
  • DELL服务器数据恢复成功案例

    DELL服务器数据恢复成功案例DELLEqualLogicPS6100采用虚拟ISCSISAN阵列,为远程或分支办公室、部门和中小企业存储部署带来企业级功能、智能化、自动化和可靠性。以简化的管理、快速的部署及合理的价格满足了分支办公室和中小企业的存储需求,同时提供全套企业级数据保护和管理功能、可靠的性能、可扩展性和容错功能,是中型企业级存储的起点产品,但某些物理故障或其他操作都可能会对卷或存储造成破坏,因此对系列存储的数…

    2022年6月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号