当前位置: 首页 > 面试题库 >

Android Webview输入类型文件

吉和同
2023-03-14
问题内容

我正在尝试从webview使用android构建Web项目。我有一个类型为file的输入字段,`<input type=”file”

`可让用户将文件上传到服务器,但是在android webview上似乎不起作用,当我点击浏览按钮时,什么也没发生。

编译器

package com.gururaju.bbmp;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebChromeClient;

public class Comp extends Activity {
    WebView comp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_comp);

        WebView myWebView = (WebView) findViewById(R.id.comp);
        myWebView.setWebChromeClient(new WebChromeClient());
        myWebView.loadUrl("file:///android_asset/comp.html");

    }
}

activity_comp.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/comp"
        >

        </WebView>
</LinearLayout>

comp.html (在资产文件夹中)

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" type="text/css" href="comp.css">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h2 align="center">Post your Complaints here</h2>
    <form enctype="multipart/form-data" action="" name="complaints" method="POST">
        <input class="title" type="text" name="title" placeholder="Enter the Complaint Title" /><br />

        <div class="spacer-welcome"></div>
        <textarea name="desc" class="desc" placeholder="Your complaint description here..."></textarea><br />
        <div class="spacer-welcome1"></div>

            <input id="center" type="file" name="image" ><br />
        <input class="upload" type="submit" name="submit" value="Submit" >
    </form>
</body>
</html>

任何帮助,将不胜感激。


问题答案:

Riad的答案指向了正确的方向,但是仅凭一个回调还不足以实现。

您总共必须实现四个隐藏的API方法。它们的用法取决于Android版本。这些方法是:

public void openFileChooser(ValueCallback<Uri> uploadMsg)
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType)
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture)
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)

您可以使用以下库为您执行所有这些操作:

https://github.com/delight-im/Android-
AdvancedWebView

或者,您可以查看源代码以了解其工作方式:

https://github.com/delight-im/Android-
AdvancedWebView/blob/master/Source/src/im/delight/android/webview/AdvancedWebView.java



 类似资料:
  • 我有一个带有日期字段的Laravel应用程序。 当我使用“type=text”时 我获取存储在数据库中的值。 当我使用“type=date”时 我得到dd/mm/yyyy和一个下拉列表(datepicker)来为每一个选择一个数字。我本以为dd、mm和yyyy会预先填充我数据库中的日期。 当输入=text工作时,我不喜欢这样,因为使用可以输入该字段中的任何文本。 最好的方法是什么?保留输入=日期并

  • 阅读Yii2 kartik小部件FileInput的文档时,我找不到有关数据应存储在其中的字段类型的任何详细信息。 http://demos.krajee.com/widget-details/fileinput 我应该使用BLOB字段还是String?

  • 在html中是否有一种输入类型,类似于我想要的stackoverflow或youtube中的标签输入文件,用户可以添加5个字符串(或标签)。 我希望你能帮我...

  • 我正在学习Apollo和graphQL,并将其集成到我的一个项目中。到目前为止一切正常,但现在我正在尝试一些突变,我正在努力处理输入类型和查询类型。我觉得事情比实际情况要复杂得多,因此我正在寻求如何处理我的情况的建议。我在网上找到的示例都是非常基本的模式,但现实总是更加复杂,因为我的模式非常大,如下所示(我只复制一部分): 然后定义输入和负载,依此类推... 为此,我需要一个变异来保存“计算”,因

  • 问题内容: 我正在使用以下方式动态加载Python模块 有人可以告诉我什么是模块类型的正确类型注释。该模块不包含一个模块,在其他地方也找不到答案。 问题答案: 您正在寻找。

  • 问题内容: 您如何设置输入按钮的样式? 问题答案: 众所周知,对文件输入进行样式设置非常困难,因为大多数浏览器都不会通过CSS或javascript更改外观。 即使输入的大小也不会响应以下内容: 相反,您将需要使用size属性: 对于任何比这更复杂的样式(例如,更改浏览按钮的外观),您将需要研究在本地文件输入上方叠加样式按钮和输入框的棘手方法。rm在www.quirksmode.org/dom/i