3

私は次のシナリオを持っています:

  1. リンクまたはボタンをクリックします。
  2. ZXingでバーコードスキャナーを開きます。
  3. コードをスキャンします。
  4. デコードされたデータを他のWebページに渡します。

1および4の場合、WebView内で実行する必要があります。私が直面した問題は、このhttps://code.google.com/p/zxing/wiki/ScanningFromWebPagesを使用して、デフォルトのブラウザでWebページを開くことでした。この問題を解決するには、代わりに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 に答える