legongju.com
我们一直在努力
2025-01-11 10:47 | 星期六

如何处理Android FileChooser的回调

在 Android 中,处理 FileChooser 的回调需要使用 WebChromeClient 类

  1. 首先,确保你的 Activity 继承自 AppCompatActivity,并实现 WebChromeClient.FileChooserParams 接口。
import androidx.appcompat.app.AppCompatActivity;
import android.webkit.WebChromeClient;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {
    // ...
}
  1. 在你的布局文件中添加一个 WebView。
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  1. 初始化 WebView 并设置 WebChromeClient。
import android.webkit.WebView;
import android.webkit.WebSettings;
import android.webkit.ValueCallback;

private WebView webView;
private ValueCallback filePathCallback;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView = findViewById(R.id.webview);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setLoadsImagesAutomatically(true);

    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {
            // 保存 filePathCallback 以便稍后使用
            MainActivity.this.filePathCallback = filePathCallback;

            // 创建一个 Intent 用于选择文件
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            intent.setType("*/*");
            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);

            // 启动文件选择器
            startActivityForResult(Intent.createChooser(intent, "选择文件"), FILECHOOSER_RESULTCODE);

            return true;
        }
    });
}
  1. 重写 onActivityResult 方法以处理文件选择结果。
import android.content.Intent;
import android.net.Uri;

private static final int FILECHOOSER_RESULTCODE = 1;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == FILECHOOSER_RESULTCODE && resultCode == RESULT_OK && data != null) {
        Uri[] results = null;

        if (data.getData() != null) {
            // 单个文件选择
            results = new Uri[]{data.getData()};
        } else if (data.getClipData() != null) {
            // 多个文件选择
            ClipData clipData = https://www.yisu.com/ask/data.getClipData();>

现在,当你的 WebView 中的 JavaScript 代码调用 input 标签的 click() 方法时,应用程序将显示文件选择器。选定的文件将通过回调传递给 WebView。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/87834.html

相关推荐

  • android studio安装不了如何解决

    android studio安装不了如何解决

    在尝试安装Android Studio时,可能会遇到一些问题。以下是一些常见的原因及其解决方案:
    常见原因 系统环境不兼容:Android Studio需要在64位的Windows、ma...

  • android怎么获取进程id

    android怎么获取进程id

    在Android中,你可以使用android.os.Process类来获取当前进程的ID。以下是一个简单的示例:
    import android.os.Process; public class MainActivity extend...

  • android图片如何压缩到指定大小

    android图片如何压缩到指定大小

    在Android中,将图片压缩到指定大小需要遵循以下步骤: 首先,从文件或资源中获取原始图片。你可以使用BitmapFactory类的decodeFile()或decodeResource()方法来实...

  • android button如何设置图片

    android button如何设置图片

    在Android中,为按钮设置图片有两种方法:使用XML布局文件或者使用Java/Kotlin代码。
    方法一:使用XML布局文件 首先,将图片放入项目的res/drawable文件夹中...

  • Android FileChooser的安全性如何保证

    Android FileChooser的安全性如何保证

    Android FileChooser的安全性是一个复杂的问题,需要采取多种措施来确保。以下是一些建议,可以帮助提高Android FileChooser的安全性: 使用可信来源的文件选择器...

  • PLUCK函数与GROUP BY语句的结合使用

    PLUCK函数与GROUP BY语句的结合使用

    PLUCK 函数和 GROUP BY 语句通常不会直接结合使用,因为它们服务于不同的目的
    然而,在某些情况下,您可能需要从一个集合中提取特定属性,并对这些属性进行...

  • 如何通过showtable查看表结构

    如何通过showtable查看表结构

    showtable 不是一个 SQL 命令,但您可以使用 DESCRIBE 或 SHOW CREATE TABLE 命令来查看表结构 使用 DESCRIBE 命令: DESCRIBE table_name; 将 table_name 替换为...

  • 如何通过showtable查看表的索引

    如何通过showtable查看表的索引

    要查看表的索引,您可以使用 SHOW INDEX 语句。这将显示有关表索引的信息,例如索引名称、列名等。以下是使用 SHOW INDEX 的基本语法:
    SHOW INDEX FROM ta...