You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Android WebView将选中的图片传输至jQuery脚本?

Android中通过Photo Picker选图并传递至WebView的实现方案

需求说明

在Android项目中使用Photo Picker选择图片,将选中的图片传递至WebView内的jQuery脚本进行预裁剪。

现有代码

Photo Picker注册代码

ActivityResultLauncher<PickVisualMediaRequest> pickMedia = registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), photo -> {
    if (photo == null) {
        Toast.makeText(MainActivity.this, "No image Selected", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(MainActivity.this, "Image: "+ photo , Toast.LENGTH_SHORT).show();
    }
});

WebView交互代码

webView.addJavascriptInterface(new Object() {
        @JavascriptInterface
        public void performClick() {
            pickMedia.launch(new PickVisualMediaRequest.Builder()
                    .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE)
                    .build());
        }
    }, "ok");

实现图片传递到WebView的步骤

1. 将选中图片的Uri转换为Base64

WebView的JS脚本更易处理Base64格式的图片数据,添加工具方法完成转换:

private String uriToBase64(Uri uri) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try (InputStream inputStream = getContentResolver().openInputStream(uri)) {
        byte[] buffer = new byte[1024];
        int read;
        while ((read = inputStream.read(buffer)) != -1) {
            baos.write(buffer, 0, read);
        }
        return Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

2. 修改Photo Picker回调,传递Base64到WebView

更新回调逻辑,将转换后的图片数据通过evaluateJavascript传递给JS:

ActivityResultLauncher<PickVisualMediaRequest> pickMedia = registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), photo -> {
    if (photo == null) {
        Toast.makeText(MainActivity.this, "未选中图片", Toast.LENGTH_SHORT).show();
    } else {
        String base64Image = uriToBase64(photo);
        if (base64Image != null) {
            // 调用WebView中的JS处理函数
            webView.evaluateJavascript("javascript:handleSelectedImage('data:image/jpeg;base64," + base64Image + "')", null);
        } else {
            Toast.makeText(MainActivity.this, "图片转换失败", Toast.LENGTH_SHORT).show();
        }
    }
});

3. 在WebView的HTML中添加JS处理函数

在网页代码中实现接收图片并执行预裁剪的逻辑:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- 若使用裁剪库,需引入对应资源,例如cropper.js -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.js"></script>

<script>
    function handleSelectedImage(base64Image) {
        // 清空裁剪容器并插入图片
        $('#crop-container').empty().html('<img src="' + base64Image + '" id="crop-image">');
        // 初始化裁剪组件
        $('#crop-image').cropper({
            aspectRatio: 1, // 设置裁剪比例,可按需调整
            viewMode: 1,
            autoCropArea: 0.8
        });
    }
</script>

<!-- 裁剪容器 -->
<div id="crop-container" style="width: 300px; height: 300px; border: 1px solid #ccc;"></div>

4. 配置WebView必要参数

确保WebView允许JS执行和文件访问:

WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true);

内容的提问来源于stack exchange,提问作者Юрий Берека

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 00:43:22