3

我有以下情况:

  1. 单击链接或按钮。
  2. 用 ZXing 打开条码扫描器。
  3. 扫码。
  4. 将解码后的数据传递给其他网页。

对于 1 和 4,必须在 WebView 内部执行。我面临的问题是,使用此https://code.google.com/p/zxing/wiki/ScanningFromWebPages,我将在默认浏览器中打开网页。我应该使用 Intent 来解决这个问题吗?或者有什么更好的解决方法?

4

1 回答 1

5

成功运行,需要在JavascriptInterface中添加调用Intent的代码,获取解码内容的onActivityResult不应该放在JavascriptInterface中。

示例代码:

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();
}
于 2013-01-30T15:00:15.350 回答