code

바코드 스캐너 앱을 사용하지 않고 Zxing 라이브러리 포함

codestyles 2020. 12. 12. 10:52
반응형

바코드 스캐너 앱을 사용하지 않고 Zxing 라이브러리 포함


이 질문에 이미 답변이 있습니다.

바코드 스캐너 앱을 설치하지 않고 스캔을 제공하기 위해 zxing 라이브러리를 포함하는 선호하는 방법은 무엇입니까? 사용자에게 추가 설치를 요청하지 않고 Android에 삽입하려고합니다. (iPhone src의 작동 방식과 유사).


Intent 를 통해 통합하는 것이 정말 쉽습니다 . 더 안정적이며 자동으로 업데이트됩니다. 내가 조언하지는 않지만 ...

전체 소스 코드는 ZXing 프로젝트 에서 사용할 수 있습니다 . 당신은 구축하고자 core.jar에서 core/당신의 안드로이드에 넣어 lib/당신의 응용 프로그램의 핵심 디코더를 포함하는 폴더입니다. 을 포함하지 않으려 고합니다 javase. android/바코드 스캐너의 소스이므로 코드를 볼 수 있지만 작성자로서 우리는 단순히 복사하여 붙여 넣기 만하지 않는 것이 좋습니다.

그것은이다 아파치 라이센스 는 기본적으로 라이선스 조건에 대한 사용자 액세스 권한을 부여 당신이 한, 자유롭게 사용할 수 있다는 것을 의미한다.


안드로이드 QR / 바코드 / 멀티 포맷 디코더.

ZXing API를 사용하여 Android 애플리케이션을 만들고 디코딩 코드 만 내 애플리케이션에 삽입했습니다. 이 디코더에 대한 입력은 Android 에뮬레이터의 SD 카드를 통해 제공되었습니다.

단계는 다음과 같습니다.

  1. 먼저 Eclipse IDE에서 SD 카드 및 카메라 기능을 켜고 AVD (에뮬레이터) 버전 4를 생성했습니다.

  2. 다음으로 명령 프롬프트에서 아래 명령을 사용하여 SDCard를 만들었습니다.

    c:\>mksdcard 40M mysdcard.iso
    

여기서 40M은 내가 만든 SD 카드의 크기입니다. C : 드라이브에 저장됩니다. .iso 부분이 중요합니다.

  1. 다음으로 명령 프롬프트에서 아래 명령을 사용하여 SD 카드를 에뮬레이터에 마운트해야합니다.

     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
    

여기서 myavd4는 1 단계에서 만든 에뮬레이터 / 안드로이드 가상 장치의 이름입니다. avd 이름 앞의 '@'기호도 중요합니다.

에뮬레이터를 항상 계속 실행합니다. 닫히면 위의 3 단계를 다시 실행해야합니다.

  1. 명령 프롬프트에서 아래 명령을 사용하여 에뮬레이터에 마운트 된이 SD 카드에 QR 코드 또는 기타 코드 이미지를 푸시 할 수 있습니다.

    c:\>adb push "c:\myqrcode.png" /sdcard
    
  2. 다음으로 Eclipse IDE에서 새 Android 프로젝트를 시작합니다. 아래 코드는 프로젝트의 QRDecoder.java 파일에 붙여 넣어야합니다.

    package com.example.palani;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.TextView;
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.BinaryBitmap;
    import com.google.zxing.ChecksumException;
    import com.google.zxing.FormatException;
    import com.google.zxing.LuminanceSource;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.NotFoundException;
    import com.google.zxing.Reader;
    import com.google.zxing.Result;
    import com.google.zxing.ResultPoint;
    import com.google.zxing.client.androidtest.RGBLuminanceSource;
    import com.google.zxing.common.HybridBinarizer;
    public class QRDecoder extends Activity implements OnClickListener {
        public static class Global
        {
            public static String text=null;
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Bitmap bMap = BitmapFactory.decodeFile("/sdcard/myqrcode.png");
            TextView textv = (TextView) findViewById(R.id.mytext);
            View webbutton=findViewById(R.id.webbutton);
            LuminanceSource source = new RGBLuminanceSource(bMap); 
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            Reader reader = new MultiFormatReader();
            try {
                 Result result = reader.decode(bitmap);
                 Global.text = result.getText(); 
                    byte[] rawBytes = result.getRawBytes(); 
                    BarcodeFormat format = result.getBarcodeFormat(); 
                    ResultPoint[] points = result.getResultPoints();
                    textv.setText(Global.text);
                    webbutton.setOnClickListener(this);
            } catch (NotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ChecksumException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (FormatException e) {
                // TODO Auto-generated catch block
        e.printStackTrace();
    
    
            }   
        }
    
        @Override
        public void onClick(View v) {
            Uri uri = Uri.parse(Global.text); 
            Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
            startActivity(intent);
    
        }
    
    }
    
  3. 다음으로 아래 링크에서 ZXing 소스 코드 (ZXing-1.6.zip)를 다운로드했습니다.

    http://code.google.com/p/zxing/downloads/list
    

그런 다음 압축을 풀고 D : \ zxing-1.6 \ core \ src \ com으로 이동합니다.

com 폴더를 복사하여 Eclipse의 패키지에 붙여 넣습니다.

(참고, 우리 프로젝트의 패키지를 마우스 오른쪽 버튼으로 클릭하고 붙여 넣으십시오 ... 기존 폴더 교체를 요청하는 경우 예를 선택하십시오)

  1. 다음으로 res / layout / main.xml 파일에 아래 코드를 복사하여 붙여 넣습니다.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="20dip"
        >
    
    <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    
    android:textColor="@color/mbackground1"
    android:gravity="center_horizontal"
    android:text="@string/decode_label"
    android:padding="20dip" 
    />
    
    <TextView
    android:id="@+id/mytext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:background="@color/mbackground2" 
    android:textColor="@color/mytextcolor" 
    android:padding="20dip"
    />
    
    
     <TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/continue_label"
    android:gravity="center_horizontal"
    android:textColor="@color/mytextcolor"
    android:padding="20dip"
    />
    
    <Button 
    android:id="@+id/webbutton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/web_button"
    android:textColor="@color/mytextcolor"
    />
    
    </LinearLayout>
    
  2. 다음으로 res / values ​​/ strings.xml 파일에 아래 코드를 복사하여 붙여 넣습니다.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, QRDecoder!</string>
        <string name="app_name">QRDecoder</string>
        <string name="continue_label">Click below to load the URL!!</string>
        <string name="web_button">Load the URL!!</string>
        <string name="decode_label">Decoded URL</string>
    
    </resources>
    
  3. 다음으로 res / values ​​/ color.xml 파일에 아래 코드를 복사하여 붙여 넣으십시오. 존재하지 않는 경우 새로 작성하십시오.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="mbackground1">#7cfc00</color>
    <color name="mbackground2">#ffff00</color>
    <color name="mytextcolor">#d2691e</color>
    </resources>
    
  4. 다음으로, 매니페스트 파일에서 여는 태그 뒤에 아래 코드를 복사하여 붙여 넣습니다.

    <manifest>
    
    
    <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />      
    
  5. So, these above steps done...our application is ready. Now, u can run the application and it will give u the decoded result of the input image we have given.

  6. In order to change the input, push another file to SD card using the command below in the command prompt

    c:\>adb push "c:\image2.png" /sdcard
    

and change the input in our QRDecoder.java to reflect the same

    Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");

the inputs can be any format like QRCode, Barcode, etc....the types of image can be bmp, jpg or png.

I used the below website for generating the QR codes for test purpose

http://barcode.tec-it.com/

AND http://qrcode.kaywa.com

Thanks and I would like to mention the point that I am just a beginner in android and mobile application development and sorry for any mistakes that I might have done...


If are following Palani answer and only want to import zxing core. Here is how you can use RGBLuminanceSource without importing zxing.androidtest.

// import com.google.zxing.client.androidtest.RGBLuminanceSource;
import com.google.zxing.RGBLuminanceSource;

// Bitmap mBitmap; // some bitmap...

int width = mBitmap.getWidth();
int height = mBitmap.getHeight();
int[] pixels = new int[width * height];
mBitmap.getPixels(pixels, 0, width, 0, 0, width, height);

RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);

BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));

try {
   Result result = zxingReader.decode(binaryBitmap);
} catch (Exception e) {
   e.printStackTrace();
}

Now you can use the official Barcode API from Google:

The Barcode API detects barcodes in real-time, on device, in any orientation. It can also detect multiple barcodes at once.

It reads the following barcode formats:

  • 1D barcodes: EAN-13, EAN-8, UPC-A, UPC-E, Code-39, Code-93, Code-128, ITF, Codabar
  • 2D barcodes: QR Code, Data Matrix, PDF-417, AZTEC

It automatically parses QR Codes, Data Matrix, PDF-417, and Aztec values, for the following supported formats:

  • URL
  • Contact information (VCARD, etc.)
  • Calendar event
  • Email
  • Phone
  • SMS
  • ISBN
  • WiFi
  • Geo-location (latitude and longitude)
  • AAMVA driver license/ID

I myself tried this method an most of all seemed to work.

Though I have a few points to make

  1. It will complain about the package com.google.zxing.client.androidtest which is needed for the RGBLuminanceSource class found in the package and used in the QRDecoder Activity.So import the zxing/androidtest package as well.

  2. If you are adding the Zxing Library outside your package then you will need to edit all the R.java references as it wont find the R.java file in its package.

For Example:

Instead of

mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run);

in the BenchmarkActivity.java file use

mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run);

We can also use the DDMS interface of Eclipse to push the QRCode to the device SDCard.

Using DDMS


https://github.com/dm77/barcodescanner

I prefered this lib over Google Play Services because as usual, Google Play Services requires the same version installed on the device.

It embeds Zxing with the new build system and provides an aar. Really cool.


I tried to embed ZXing (XZing) for a while, until i discovered Zbar. They have a easyer way of embeding, less code and easy examples.

http://sourceforge.net/projects/zbar/

참고URL : https://stackoverflow.com/questions/4854442/embed-zxing-library-without-using-barcode-scanner-app

반응형