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

Android WebView搭载ASP.NET应用时条码扫描数据回传后端问题咨询

实现逻辑说明

你当前的核心问题是异步扫描得到的条码值需要桥接回WebView的JS上下文,再传递给ASP.NET后端,按以下步骤实现即可:

1. 前置配置确认

确保WebView已开启JS交互权限,且你定义的AndroidWebInterface已正确挂载:

// WebView配置必填项
webView.settings.javaScriptEnabled = true
webView.addJavascriptInterface(AndroidWebInterface(), "AndroidWebInterface")

2. Web端新增接收扫描结果的JS函数

因为启动扫描是异步操作,无法通过getIcc()同步返回值,需要在你的ASP.NET Web应用的JS代码中新增全局回调函数,拿到结果后直接请求后端接口即可:

// JS侧全局函数,用于接收Android返回的条码值
function onBarcodeScanned(iccCode) {
    // 此处按你现有ASP.NET后端的接口规则发送请求即可,示例用fetch
    fetch('/api/your-aspnet-endpoint', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            // 携带你的Web应用原有鉴权凭证,避免权限校验失败
        },
        body: JSON.stringify({ icc: iccCode })
    })
    .then(res => res.json())
    .then(data => {
        // 处理ASP.NET后端返回的响应逻辑
    })
}

3. Android端拿到扫描结果后触发JS回调

修改你registerForActivityResult的回调逻辑,拿到条码值后调用WebView执行上述JS函数即可:

registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val icc = result.data?.getStringExtra("icc") ?: return@registerForActivityResult
        // 转义条码中的特殊字符,避免JS执行报错
        val escapedIcc = icc.replace("'", "\\'")
        // 主线程调用WebView执行JS回调
        webView.evaluateJavascript("javascript:onBarcodeScanned('$escapedIcc')", null)
        // 兼容Android 4.4以下版本用下面的方法,无特殊需求可忽略
        // webView.loadUrl("javascript:onBarcodeScanned('$escapedIcc')")
    }
}

可选方案:Android端直接请求ASP.NET接口

如果不想在JS侧处理请求,也可以在Android端拿到条码值后直接发起网络请求调用ASP.NET后端接口,注意要和Web应用同步Cookie/鉴权凭证,避免权限校验失败。


内容的提问来源于stack exchange,提问作者Lucho Gizdov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:54:02