在qr代码扫描仪中的Webview

时间:2014-03-25 00:15:11

标签: android webview

class MyWebClient extends WebViewClient {
     @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub

               return false;

        }
    }

PreviewCallback previewCb = new PreviewCallback() {
        public void onPreviewFrame(byte[] data, Camera camera) {
            Camera.Parameters parameters = camera.getParameters();
            Size size = parameters.getPreviewSize();

            Image barcode = new Image(size.width, size.height, "Y800");
            barcode.setData(data);

            int result = scanner.scanImage(barcode);

            if (result != 0) {
                previewing = false;
                mCamera.setPreviewCallback(null);
                mCamera.stopPreview();

                SymbolSet syms = scanner.getResults();
                for (Symbol sym : syms) {

                  String value = new String(sym.getData());
                  if(value.startsWith("http://192.168.1.6")){

                  scanText.setText("QR Code result: " + value);
                    barcodeScanned = true;
                    WebView webView = (WebView) findViewById(R.id.web_engine);
                    webView.setWebViewClient(new MyWebClient()); 
                    webView.getSettings().setJavaScriptEnabled(true);
                    webView.loadUrl(value);

                  }
                  else{
                      scanText.setText("QR Code result 2: " + value);
                      barcodeScanned = true;
                      }
                   TextView tv = (TextView) findViewById(R.id.scanText);
                    tv.setMovementMethod(LinkMovementMethod.getInstance());


                }

            }


        }
    };

这是logcat:

03-25 20:05:22.714: E/AndroidRuntime(14267): FATAL EXCEPTION: main
03-25 20:05:22.714: E/AndroidRuntime(14267): java.lang.NullPointerException
03-25 20:05:22.714: E/AndroidRuntime(14267):    at net.sourceforge.zbar.android.CameraTest.CameraTestActivity$2.onPreviewFrame(CameraTestActivity.java:201)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at android.hardware.Camera$EventHandler.handleMessage(Camera.java:864)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at android.os.Looper.loop(Looper.java:176)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at android.app.ActivityThread.main(ActivityThread.java:5317)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at java.lang.reflect.Method.invokeNative(Native Method)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at java.lang.reflect.Method.invoke(Method.java:511)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
03-25 20:05:22.714: E/AndroidRuntime(14267):    at dalvik.system.NativeStart.main(Native Method)

我有一个二维码扫描器应用程序。扫描的qr代码以http://192.168.1.6开头时,我的应用停止。我想在webview中显示此链接,而不是在浏览器中显示。但如果网址不是以http://192.168.1.6开头,则会在另一个浏览器中打开该链接。

2 个答案:

答案 0 :(得分:0)

您需要正确实施WebViewClient.shouldOverrideUrlLoading功能。

首先,请不要从中拨打loadUrl。 URL加载已在进行中,再次调用它是不正确的。

其次,您可以检查正在加载的网址(它作为参数传递给shouldOverrideUrlLoading的{​​{1}},然后更改逻辑以执行正确的操作,具体取决于是否& #39; s是否存在。听起来好像只是在那里你只想http://192.168.1.6来处理WebView中的负载。否则,你应该创建并发送一个ACTION_VIEW Intent来加载URL设备的浏览器并返回true。

请参阅http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading(android.webkit.WebView,java.lang.String)和http://developer.android.com/reference/android/content/Intent.html

答案 1 :(得分:0)

根据您的堆栈跟踪,您在CameraTestActivity的201行上有一个NullPointerException

java.lang.NullPointerException at net.sourceforge.zbar.android.CameraTest.CameraTestActivity$2.onPreviewFrame(CameraTestActivity.java:201)

如果您想发布包含此行的代码,我可以帮助您追踪它。