【问题标题】:Android Barcode scanner using Zxing使用 Zxing 的 Android 条码扫描器
【发布时间】:2013-05-25 04:32:33
【问题描述】:

我想将 Zxing 集成到一个 android 项目中(我是初学者)。

我已经看到这里描述的方式 http://bit.ly/nBszrL 是不鼓励的,最好的方法是通过 Intents,正如这篇文章中所说的 http://bit.ly/o29Uma

p.s : 我不想在我的设备上安装条形码扫描仪

我在我的项目中包含了所需的类:http://bit.ly/16pKMKx

我的测试代码:

package com.example.barcodescanner;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    private static final int REQUEST_BARCODE = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    // when my button is clicked
    public void scanBarCode(View view) {
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "PRODUCT_MODE");  

        startActivityForResult(intent, REQUEST_BARCODE);

        Toast toast = Toast.makeText(this, "Start scanning Barcode", Toast.LENGTH_SHORT);
        toast.show();
    }

}

我真的不明白如何通过这种方式做到这一点:http://bit.ly/18v7K2O(我真的不明白,这就是我想要使用的)

你知道怎么做吗?

谢谢。

【问题讨论】:

    标签: android android-intent barcode zxing barcode-scanner


    【解决方案1】:

    Android 系统的构建是为了让人们可以编写能够很好地完成某项特定事情的应用程序,并且其他开发人员可以在需要时使用它们。条码扫描就是一个很好的例子。 ZXing 是一款出色的扫描仪,并允许其他应用通过 Intents 使用它。基本上,您告诉操作系统您要扫描条码,ZXing 说:“是的,我可以做到!”他们扫描条形码并将信息返回给您。这样做的好处是您不必担心他们何时更新他们的东西。用户只会收到更新的通知,您可以使用最新最好的。一个潜在的缺点是用户的手机上有另一个应用程序,但我并不认为这是一个缺点。要这样做,您实际上只需要链接到的两个文件,然后只需将其放入代码中即可开始扫描:

    IntentIntegrator integrator = new IntentIntegrator(yourActivity);
    integrator.initiateScan();
    

    而这一位从条形码扫描仪中得到答案:

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
        if (scanResult != null) {
            // handle scan result
        }
        // else continue with any other code you need in the method
      ...
    }
    

    您唯一的其他选择是提取条形码扫描仪的所有代码并将其合并到您的项目中,然后弄清楚它是如何工作的,以及您需要在哪里绑定才能将其引入您的应用程序。然后,每次 ZXing 进行更新时,您都必须重新执行此操作。真是一团糟!

    【讨论】:

    • 谢谢 :) 我按照你说的做了,它可以工作,但是当我的应用程序第一次运行 BarcodeScanner 主页活动时,它会显示我,我必须点击一个按钮才能到达条码读取器。我想将扫描时相机的方向从横向更改为纵向,我一直在寻找这个,发现我应该在barcodescanner的源代码中进行修改,我也想让条形码扫描仪只在一个小块。我可以用这种方法吗?谢谢。
    【解决方案2】:
        You can use like this.It works in Activity as well as Fragment.
        Add this code in click listner of any view:
    
    
         scan.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      IntentIntegrator integrator = new IntentIntegrator(getActivity());
    
    
           integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
                      integrator.setCameraId(0);
                      integrator.setBeepEnabled(true);
                      integrator.setBarcodeImageEnabled(true);
                      integrator.forFragment(InsuranceInfo.this).initiateScan();
                      System.out.println("CLick");
                  }
    
    
    
    
    On the Acivity Result Method  add this:-
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
            System.out.println((intentResult.getContents()+""));
    
            super.onActivityResult(requestCode, resultCode, data);
            if (intentResult != null) {
                //passing result to another Activity.
                //    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(intentResult.getContents() + ""));
             //   Toast.makeText(getActivity(),"Scan Results="+(intentResult.getContents()+""),Toast.LENGTH_SHORT).show();
                System.out.println((intentResult.getContents()+""));
                Snackbar.make(getActivity().findViewById(android.R.id.content),
                        ("Scan Results="+ (intentResult.getContents()+"")), Snackbar.LENGTH_LONG).show();
             ScanResult= (intentResult.getContents()+"");
             insurance.setText(ScanResult);
    
            }
            else {
                Toast.makeText(getActivity(), " Empty Result ", Toast.LENGTH_SHORT).show();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2012-04-22
      • 1970-01-01
      相关资源
      最近更新 更多