Android在WebView中使用H5来调用本地相机相册的方法

本文详细介绍了在Android原生Activity中嵌套WebView进行混合开发时,如何实现H5调用本地相机和相册。遇到的问题包括原生与H5交互、H5调用相机相册失败以及WebView权限配置等,文中通过集成开源库JsBridge,配置WebSettings,处理onShowFileChooser()方法,以及适配Android 7.0的FileProvider,提供了解决这些问题的完整步骤和关键代码。
摘要由CSDN通过智能技术生成

最近在做一个项目需求是在Android原生的Activity中嵌套一个WebView来做混合开发,之前也做过这样的开发方式,一般都是

纯H5的逻辑使用,但是这次使用的是H5来调用本地的相机相册,下面坑来了:

1:首先Android原生和H5的交互的集成问题。

2:H5中调用本地的相机相册和视频拍摄是调用不起来的,需要原生自己调用。

3:WebView在使用过程中会出现一系列问题。

首先解决第一个问题:

原生和H5交互的问题中为了方便一般使用第三方库,GitHub上有开源库,其中选择了一个Star比较多的https://github.com/lzyzsd/JsBridge,但是我在集成后出现了一个问题是H5发消息给原生,原生能接收到,但是原生发消息给H5的时候H5死活接收不到,这个问题调试了很久都没有调试成功,最后选择放弃了,使用了另外一种集成方式,也是使用的这个开源库,但是是以lib的形式集成到本地的,把lib包集成到本地项目中(资源下载):

   1:在app下的build.gradle的dependencies闭包中添加如下依赖

    compile project(':library')

   2:如果你的包中有多个依赖还要在defaultConfig闭包中添加如下依赖,不然打包会报错:

    defaultConfig {
          ................
        multiDexEnabled true
       }

   3:在项目的最外层settings.gradle中加入

   include ':app', ':library'

   4:OK集成完毕

然后解决第二个问题:

在原生代码中实例化WebView后做如下配置:

        WebSettings webSettings = webView.getSettings();
        
        webSettings.setDomStorageEnabled(true);//设置适应Html5 //重点是这个设置
        webSettings.setUseWideViewPort(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setDefaultTextEncodingName("UTF-8");
        webSettings.setAllowContentAccess(true); // 是否可访问Content Provider的资源,默认值 true
        webSettings.setAllowFileAccess(true);    // 是否可访问本地文件,默认值 true
        // 是否允许通过file url加载的Javascript读取本地文件,默认值 false
        webSettings.setAllowFileAccessFromFileURLs(false);
        // 是否允许通过file url加载的Javascript读取全部资源(包括文件,http,https),默认值 false
        webSettings.setAllowUniversalAccessFromFileURLs(false);

        webView.loadUrl(url);
        webView.setWebViewClient(new BridgeWebViewClient(webView){
            @Override
            public void on
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值