`
zxs19861202
  • 浏览: 915300 次
  • 性别: Icon_minigender_1
  • 来自: 湖北—》上海
社区版块
存档分类
最新评论

android 中支持input标签上传文件

 
阅读更多

关键代码如下:

private ValueCallback<Uri> mUploadMessage;

    private ValueCallback<Uri[]> mUploadCallbackAboveL;

    privatefinalstaticintFILECHOOSER_RESULTCODE = 1;

    

    @Override

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

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == FILECHOOSER_RESULTCODE) {

            if (null == mUploadMessage && null == mUploadCallbackAboveL)

                return;

            Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();

            if (mUploadCallbackAboveL != null) {

                onActivityResultAboveL(requestCode, resultCode, data);

            } else if (mUploadMessage != null) {

                mUploadMessage.onReceiveValue(result);

                mUploadMessage.onReceiveValue(result);

                mUploadMessage = null;

            }

        }

    }

 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)

    private void onActivityResultAboveL(int requestCode, int resultCode, Intent data) {

        if (requestCode != FILECHOOSER_RESULTCODE || mUploadCallbackAboveL == null) {

            return;

        }

 

        Uri[] results = null;

        if (resultCode == Activity.RESULT_OK) {

            if (data == null) {

 

            } else {

                String dataString = data.getDataString();

                ClipData clipData = data.getClipData();

 

                if (clipData != null) {

                    results = new Uri[clipData.getItemCount()];

                    for (int i = 0; i < clipData.getItemCount(); i++) {

                        ClipData.Item item = clipData.getItemAt(i);

                        results[i] = item.getUri();

                    }

                }

 

                if (dataString != null)

                    results = new Uri[]{Uri.parse(dataString)};

            }

        }

        mUploadCallbackAboveL.onReceiveValue(results);

        mUploadCallbackAboveL = null;

        return;

    }

 

为webview 设置WebChromeClient

 

mWebView.setWebChromeClient(new WebChromeClient() {

            // For Android 3.0+

            public void openFileChooser(ValueCallback<Uri> uploadMsg) {

                mUploadMessage = uploadMsg;

                Intent i = new Intent(Intent.ACTION_GET_CONTENT);

                i.addCategory(Intent.CATEGORY_OPENABLE);

                i.setType("*/*");

                AdWebActivity.this.startActivityForResult(Intent.createChooser(i, "File Chooser"),

                        FILECHOOSER_RESULTCODE);

            }

 

            // For Android 3.0+

            public void openFileChooser(ValueCallback uploadMsg, String acceptType) {

                mUploadMessage = uploadMsg;

                Intent i = new Intent(Intent.ACTION_GET_CONTENT);

                i.addCategory(Intent.CATEGORY_OPENABLE);

                i.setType("*/*");

                AdWebActivity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),

                        FILECHOOSER_RESULTCODE);

            }

 

            // For Android 4.1

            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {

                mUploadMessage = uploadMsg;

                Intent i = new Intent(Intent.ACTION_GET_CONTENT);

                i.addCategory(Intent.CATEGORY_OPENABLE);

                i.setType("*/*");

                AdWebActivity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),

                AdWebActivity.FILECHOOSER_RESULTCODE);

 

            }

 

            // For Android 5.0+

            public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback,

                                             WebChromeClient.FileChooserParams fileChooserParams) {

                mUploadCallbackAboveL = filePathCallback;

                Intent i = new Intent(Intent.ACTION_GET_CONTENT);

                i.addCategory(Intent.CATEGORY_OPENABLE);

                i.setType("*/*");

                AdWebActivity.this.startActivityForResult(Intent.createChooser(i, "File Browser"),

                        FILECHOOSER_RESULTCODE);

                return true;

            }

        });

 

 

分享到:
评论

相关推荐

    Android-解决在webview中input标签type="file"不能使用的问题

    然而,在实际使用中,我们可能会遇到一些问题,比如在WebView中使用`&lt;input type="file"&gt;`标签时,用户无法选择本地文件。这个现象主要是由于Android的安全机制和权限控制导致的。本文将详细讲解如何解决这个问题。 ...

    android webview input=file 失效解决方案

    然而,在使用Webview时,有时会遇到一个问题:当HTML页面中包含`&lt;input type="file"&gt;`用于上传文件的表单元素时,这个功能在Webview中可能无法正常工作。这通常是因为Android的安全策略限制了Webview对本地文件系统...

    解决RN 的 webview 组件不支持android客户端上传图片文件问题

    React Native的`&lt;WebView&gt;`组件在Android上默认并不支持文件选择器,因此,当HTML中的表单尝试通过`&lt;input type="file"&gt;`标签选择本地图片时,用户可能无法看到文件选择对话框或者无法正常上传。 要解决这个问题,...

    vue中使用input[type=”file”]实现文件上传功能

    注意:input[type=file] 标签中的属性accept=application/msword,application/pdf 在pc上正常,但是在手机ios和android上这个文件格式限制会被忽略,所以需要在js中增加格式的判断,以及对应显示样式的设置.(我也是刚...

    Android WebView 不支持 H5 input type=”file” 解决方法

    发现点击H5中 input type=”file” 标签 不能打开android资源管理器。 通过网络搜索发现是因为 android webview 由于考虑安全原因屏蔽了 input type=”file” 这个功能 。 经过不懈的努力,以及google 翻译的帮助 在...

    android客户端webview上传文件

    本篇文章将深入探讨如何在Android客户端中利用WebView实现文件上传功能,特别是针对H5页面的文件选择和上传。 首先,我们需要理解WebView的工作原理。WebView是Android系统提供的一个内置组件,它可以解析并渲染...

    Android WebView 不支持 H5 input type="file" 解决方法

    但是,当我们在 WebView 中使用 H5 的 input 标签时,发现点击 input type="file" 标签不能打开 Android 资源管理器。这是因为 Android WebView 由于考虑安全原因屏蔽了 input type="file" 这个功能。 解决方法是...

    android使用webview上传文件兼容问题解决支持5.0以上系统

    首先,我们需要了解在Android 5.0之前,文件上传通常是通过`&lt;input type="file"&gt;`标签实现的。但是,从Android 5.0开始,系统引入了更严格的权限管理,即运行时权限,这对Webview的文件选择器产生了影响。默认情况下...

    安卓H5文件上传

    HTML5引入了`&lt;input type="file"&gt;`标签,它允许用户选择本地文件进行上传。当用户点击这个输入框,系统会弹出一个文件选择对话框,用户可以选择一个或多个文件。选定文件后,这些文件的信息(如文件名、大小等)可以...

    解决react-native 的 webview 组件不支持android客户端上传图片文件问题

    通过以上步骤,你就可以实现在React-Native的Webview组件中支持Android客户端上传图片文件。这种方法的优点在于它可以保持良好的用户体验,同时避免了权限问题和安全风险。请注意,对于iOS平台,由于其系统限制,...

    Android WebView 上传文件支持全解析

    这主要是因为Android的各个版本中,WebView的实现有所不同,尤其是在涉及到文件系统交互时,没有统一的标准。因此,我们需要自定义一个WebChromeClient来处理文件选择和上传的过程。 WebChromeClient是WebView的一...

    webview支持type="file" 打开相机和相册

    在默认情况下,这个标签会在Android和iOS的WebView中触发系统的文件选择器,让用户选择存储在设备上的文件。 ### 支持相机和相册 为了让用户不仅可以选择相册中的图片,还能直接使用相机拍照,我们需要对WebView...

    WebView在android端File标签的拍照跟图片上传

    在处理用户交互时,尤其是涉及到文件操作时,如拍照和图片上传,开发者需要对WebView有深入的理解。本篇文章将详细探讨如何在Android的WebView中实现File标签的拍照和图片上传功能。 首先,我们要明白WebView并不...

    Android webview 上传图片

    - 首先,我们需要在XML布局文件中添加WebView组件,通过`&lt;WebView&gt;`标签来定义。 - 在Activity或Fragment中,通过`findViewById()`获取WebView实例,然后调用`loadUrl()`方法加载网页内容。 - 设置WebView的属性...

    Android应用源码之安卓图片上传和文件上传带jsp服务端源码.zip

    在Android应用开发中,图片和文件的上传是常见的功能需求,尤其在社交、电商或文件管理类应用中不可或缺。这份"Android应用源码之安卓图片上传和文件上传带jsp服务端源码.zip"包含了实现这一功能的完整示例,旨在...

    Android文件上传(图片)

    在WebView中,可以通过监听`shouldOverrideUrlLoading()`方法,拦截`&lt;input type="file"&gt;`标签的点击事件,然后弹出自定义的文件选择器,选择图片后,通过JavaScript接口将图片数据传递回Java层,再进行上传操作。...

    文件上传 (服务端+客户端)

    在Servlet容器(如Tomcat)中,我们需要在web.xml配置文件中启用这个解析器,或者在Servlet 3.0以上的环境中,通过注解@MultipartConfig来配置。 文件上传的安全性和性能也是需要考虑的重要因素。为防止恶意文件...

    Android代码-PrimWeb

    支持input标签文件上传 支持Js通信文件上传 简化回退及返回键的处理 简化url加载 webview 安全漏洞的问题修复,更加安全 支持权限管理,常用的定位、相册的权限 支持电话、短信、邮件的跳转 支持自定义进度条指示器 ...

Global site tag (gtag.js) - Google Analytics