21

我整个上午都在研究如何将安卓条形码扫描仪应用程序集成到网页中,但还没有找到我需要知道的确切内容。我想要一个网页,用户可以使用 android 条形码扫描仪填写文本字段。因此,用户将在网页上单击文本字段内部或单击文本字段旁边的按钮,以启动 android 条形码扫描仪。然后他们将扫描条形码并填写文本字段。

我找到了有关如何执行此操作然后转到不同页面的解决方案,但重要的是用户保持在同一页面上。我看过 zxing 项目并认为它可能可以使用,但我不确定它是否允许页面保持不变。

我很确定这是可能的,并且想知道是否有人可以给我一个关于他们如何做到这一点的高级概述。我在想它可能可以通过单击按钮提交的 ajax 请求来完成。ajax 请求将被发送到我的服务器,服务器将向 android 设备发送一些内容,该设备将启动扫描仪并返回数据,这些数据又在 ajax 响应中被发送回。有什么办法可以切断服务器,让安卓浏览器启动条码扫描器?感谢您抽出宝贵时间,感谢您对此进行的任何讨论。

4

3 回答 3

27

ZXing(斑马线)提供了通过网页通过按钮单击事件、锚标记或其他可以调用移动设备上的 URL 的操作来启动条码扫描器的功能。

当条形码扫描仪应用程序安装在 android 设备上时,URL 调用:

zxing://scan/?ret=http://foo.com/products/{CODE}/description&SCAN_FORMATS=UPC_A,EAN_13

会调出设备条码阅读器,用户扫码,通过zxing URL中提供的回调URL参数返回代码。

您可以在此处查看示例(适用于 android):http: //zxing.appspot.com/scan

于 2012-11-25T21:18:47.037 回答
7

你可以在安卓上试试这个:

您可以使用 Zxing 库对网页进行条码扫描

 <!DOCTYPE html>
    <script type="text/javascript">
    //This entire block of script should be in a separate file, and included in each doc in which you want scanner capabilities
        function zxinglistener(e){
            localStorage["zxingbarcode"] = "";
            if(e.url.split("\#")[0] == window.location.href){
                window.focus();
                processBarcode(decodeURIComponent(e.newValue));
            }
            window.removeEventListener("storage", zxinglistener, false);
        }
        if(window.location.hash != ""){
            localStorage["zxingbarcode"] = window.location.hash.substr(1);
            self.close();
            window.location.href="about:blank";//In case self.close is disabled
        }else{
            window.addEventListener("hashchange", function(e){
                window.removeEventListener("storage", zxinglistener, false);
                var hash = window.location.hash.substr(1);
                if (hash != "") {
                    window.location.hash = "";
                    processBarcode(decodeURIComponent(hash));
                }
            }, false);
        }
        function getScan(){
            var href = window.location.href.split("\#")[0];
            window.addEventListener("storage", zxinglistener, false);
            zxingWindow = window.open("zxing://scan/?ret=" + encodeURIComponent(href + "#{CODE}"),'_self');
        }

    </script>

    <html>
        <head>
            <script type="text/javascript">
                function processBarcode(b){
                    var d = document.createElement("div");
                    d.innerHTML = b;
                    document.body.appendChild(d);
                }
            </script>
        </head>
        <body>
            <button onclick="getScan()">get Scan</button>
        </body>
    </html>

供参考:阅读链接

于 2016-06-15T11:55:23.540 回答
1

使用 javascript 界面和 loadurl(javascript...),您可以从 Android 与您的网页进行通信

public void loadScript(String script){      
    webview.loadUrl("javascript:(function() { " + script + "})()");             
}

private class JavaScriptInterface {     
    public void startQRScan() {
        ...
    }
}

google 上有很多例子。

于 2012-11-12T16:22:50.970 回答