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页面的发送图片按钮点…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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.

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • adb安装apk_adb常用命令最全解析及应用

    adb安装apk_adb常用命令最全解析及应用启动adbserver命令:adbstart-server停止adbserver命令:adbkill-server查看adb版本命令:adbversion查询已连接设备/模拟器命令:adbdevices安装APK命令格式:adbinstall[-lrtsdg]参数:adbinstall后面可以跟一些可选参数来控制安装APK的行为,可用参数及含义如下:参数含义…

  • 用户浏览历史记录_微博怎么看最近浏览过的用户

    用户浏览历史记录_微博怎么看最近浏览过的用户用户在访问每个商品详情页面时,都要记录浏览历史记录历史记录只需保存多个商品的sku_id即可,而且需要保持添加sku_id的顺序,所以采用redis中的列表来保存,redis的数据存储设计在配置文

  • 无法定位程序输入点 zend_empty_string php7.dll

    无法定位程序输入点 zend_empty_string php7.dll

  • datagrid 激活码【2021.10最新】

    (datagrid 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html92U4ILM59M-eyJsaWNlbnNlSWQi…

  • 工具类BeanMap,BeanCopier

    工具类BeanMap,BeanCopier对象之间的转换;深度复制;1,BeanMap实现的是Map接口;将对象转换成Map非常简单;2,BeanCopier深度复制;Demo主要类:Test:/***Createdbyadminon2017/3/7.*/publicclassTest{publicstaticvoidmain(String[]args){

  • navicat连接mysql教程_navicat如何连接mysql?navicat 连接mysql Navicat使用教程

    navicat连接mysql教程_navicat如何连接mysql?navicat 连接mysql Navicat使用教程用Phpmyadmin导入导出数据受一定限制或服务商不配合提供mysql数据库的源文件,mysql数据库管理工具navicatformysql,对于不怎么喜欢图形界面或者不太方便使用SQL的时候。我们可以通过用这个图形界面数据库管理工具来管理mysql,可以考虑使用第三方软件备份推荐使用NavicatforMySQL。1、首先下载安装好NavicatforMySQL。2、运行程序3、…

发表回复

您的电子邮箱地址不会被公开。

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