如何在Webview中调用条形码扫描器并将其传回?

3
我有以下场景:
  1. 点击链接或按钮。
  2. 通过ZXing打开条形码扫描器。
  3. 扫描代码。
  4. 将解码数据传递给其他网页。
对于1和4,必须在WebView中执行。我面临的问题是使用此https://code.google.com/p/zxing/wiki/ScanningFromWebPages,我将在默认浏览器中打开网页。是否应该使用Intent来克服这个问题?还是有更好的解决方法?

哎呀,应该使用“invoke”而不是“call”,好吧……在我提问的链接中使用回调URL的问题是,它会打开默认浏览器以访问该URL,而不是调用条形码扫描仪的WebView。 - Tan Jia Ming
我需要做类似于你的事情。你能否在这里发布答案?我将非常感激你。 :) - Qadir Hussain
1个回答

5

成功实现了它,需要在JavascriptInterface中添加调用Intent的代码,并且不应该将onActivityResult用于获取已解码内容。

示例代码如下:

public class MainView extends Activity {
    private WebView webView;
    public static String barcode = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);

        webView = (WebView) findViewById(R.id.webView1);    //you might need to change webView1

        webView.getSettings().setJavaScriptEnabled(true);   
        webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");

        webView.setWebViewClient(new WebViewClient()); 
    } // onCreate();

    public class JavaScriptInterface {
        Context mContext;

        // Instantiate the interface and set the context
        JavaScriptInterface(Context c) {
            mContext = c;
        }

        // using Javascript to call the finish activity
        public void closeMyActivity() {
            finish();
        }

        public void scanBarcode() {
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.setPackage("com.google.zxing.client.android");
            startActivityForResult(intent, 0);
        }
    }   //JavascriptInterface

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 0) {
            if (resultCode == RESULT_OK) {
                //here is where you get your result
                barcode = intent.getStringExtra("SCAN_RESULT");
            }
        }
    }

}

在你的JavaScript代码中:
function scan(){
    Android.scanBarcode();
}

我需要做类似于你的事情。你能否在这里发布答案?我将非常感激你。 :) - Qadir Hussain
@QadirHussain 我已经为您添加了代码示例,您可能需要进行一些微调,因为我已经剪切了一些不重要的代码。 - Tan Jia Ming
@TanJiaMing...你也在iOS上实现了吗?它在iOS上能用吗? - subha
@subha,不好意思,我没有在iOS上实现过这个功能,而且在这个小项目之后我也没有涉足移动应用程序开发,所以无法再为你提供帮助了。 - Tan Jia Ming

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接