첫 번째 ZXING 의도를 얼마나 올바르게 관리합니까?

fralbo

QR 코드를 읽기 위해 앱에 ZXing 기능을 구현했습니다. Xzing은 명시 적 인 텐트를 통해 바코드 스캐너로 실행되므로 인 텐트를 처음 시작하면 바코드 설치를 요청합니다.

따라서 Play 스토어로 리디렉션되고 애플리케이션이 설치됩니다.

어쨌든 Intent가 시작 되었기 때문에 관리하기가 쉽지 않지만 우리는 결코 수익을 얻지 못합니다.

그래서 응용 프로그램은 영원히 기다립니다 ....

차단할 이벤트가 있습니까?

Integrator에 이미 바코드 설치에 대한 OnActivity 결과가있을 수 있습니까?

나는 의도를 통해 여기 Zxing에서 말한 것에 따라 PackageManager를 먼저 다루려고 시도했지만 실제로 테스트 list.size ()는 성공적입니다 ... Zalando Arghhh !!!

무슨 일이야?

목표는 BarCode가 설치되어 있는지 확인하고, 그렇지 않은 경우 StartActivityForResult로 설치하도록 요청하고 설치가 완료되면 Scan Intent를 시작하는 것이 었습니다.

문안 인사,

fralbo

그래서 제 질문에 대한 답이 없어서 안타깝습니다. 사실 Xzing을 사용하는 것보다 더 일반적이지 않은지 궁금하기 때문입니다. 실제로 선호되는 Xzing 구현은 바코드 스캐너 애플리케이션을 실행하는 의도를 사용하는 것 같습니다. 바코드 스캐너가 장치에 아직 설치되지 않은 경우 문제가 발생합니다. 이 경우 인 텐트는 다운로드 할 수 있도록 Play 스토어를 시작합니다. 여기에 문제가 있습니다. 제가 뭔가 이해하지 못했고 답을 얻지 못한 경우가 아니라면 제가 틀린 것이 아니라고 생각합니다. 일단 바코드 스캐너를 다운로드, 설치 및 실행하면 귀하의 답변을받지 못합니다. 의도를 보냈습니다! 사용자가 두 의자 사이에 엉덩이를 놓을 수 있도록합니다.

또 다른 대안은 먼저 패키지 관리자에게 Barcode Scanner가 설치되어 있는지 물어 보는 것입니다. 이렇게하면 패키지 관리자와 논의하여 앱을 설치 한 다음 스캔 의도를 시작합니다. 불행히도, 나도 시도했지만 "com.google.zxing.client.android.SCAN"이 있는지 패키지 관리자에게 묻는 것을 이해하지 못한 이유로 ... Zalando!?! Arghhh!

다른 가능성은 Xzing의 일부를 앱에 직접 통합하는 것입니다. 저는이 주제에 대한 많은 게시물을 읽었으며, 모두 다른 Xzing 버전을 기반으로하고 다른 방법을 제공했지만 작동하는 솔루션을 얻지 못했습니다. 그리고 분명히 숀 오웬은 분명히이 해결책을 낙담하는 것 같습니다. 어떤 상황에서 앱을 사용하는 동안 타사 응용 프로그램을 다운로드해야하는 것은 매우 불편할 수 있고 사용자 경험을 향상시키지 못하기 때문에 제가 정말 이해하지 못하는 것입니다. 그게 제 관점입니다. 나는 그것이 Stackoverflow에서 심각한 다운 그레이드를 일으켰더라도 그것을 가정합니다!

내 대답은 Zbar를 사용하는 것입니다. Zbar는 개발자가 Xzing으로 전환했기 때문에 더 이상 Android에서 유지되지 않습니다 !! 음 .... 어쨌든 라이브러리를 사용하는 것은 매우 효율적이고 사용하기 쉬우 며 특히 마지막 이유로 고품질 제품입니다. 여기에서 구현 방법을 설명합니다.

-먼저 https://sourceforge.net/projects/zbar/files/AndroidSDK/ZBarAndroidSDK-0.1.zip 아카이브를 다운로드합니다 .-그런 다음 물론 압축을 풉니 다. 다음과 같은 다양한 디렉토리를 얻을 수 있습니다. * 예제, CameraTest 활동을 사용하여 Eclipse에 통합하여 테스트하고 해당 구성 요소를 얻을 수 있기 때문에 * libs 하위 디렉토리 x86, armeab-v7a, armeabi 및 zbar.jar을 찾을 수 있습니다. 도서관.

Eclipse에서 cameraTest 프로젝트를 가져 오면 CameraTestActivity라는 완전히 작동하는 코드 스캐너가 있어야합니다.

따라서 응용 프로그램에 기능을 통합하려면 다음 단계를 따르십시오.

물론 모든 필수 구성 요소는 CameraTestActivirty에 있습니다.

CameraTestActivity src에서 CameraTestActivity.java 및 CameraPreview.java를 적절한 src 디렉터리로 복사 / 붙여 넣기합니다. 원하는대로 패키지를 복사 / 붙여 넣기하는 것이 좋습니다. 개인적으로 CameraTestActivity의 이름을 QRCodeScanActivity로 변경했습니다.

CameraTestActivity에서 libs의 모든 디렉토리를 적절한 libs 디렉토리로 복사 / 붙여 넣기합니다.

적절한 AndroidManifest.xml에 AndroidManifest.xml의 다음 부분을 포함합니다.

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />  Here it's as you want, it should work also on non autofocus devices

... 이미 존재하는 선언 .... ....

레이아웃 i CameraTestActivity에서 적절한 레이아웃 디렉토리로 main.xml을 복사 / 붙여 넣기합니다. CameraTestActivity는 스캔 중에 세로 방향을 강제합니다. 이 파일의 이름을 원하는대로 바꾸십시오. 원하는 경우 qrcodescan.xml.

zbar.jar 라이브러리를 사용한다고 선언해야합니다. 응용 프로그램 이름을 마우스 오른쪽 단추로 클릭하고 속성을 선택하고 Java 빌드 경로를 클릭 한 다음 JAR 추가를 클릭하고 yourAppName \ libs를 통해 zbar.jar를 선택합니다.

코드에서 2 ~ 3 개의 작은 것을 변경해야합니다. QRCodeScanActivity에서 이전 CameraTest 활동 :

public class QRCodeScanActivity extends Activity {

    // declare a constant to use in the Intent created in your application to start he scan.
    public final static int ACTIVITY_SCAN_CODE = 33;

    .....

    // Declare an intent to respond to your activity
    Intent activityResult = new Intent();

    // Not mandatory, you can add an intermediate String to return to your application
    String textScanned;

    ......

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Put here the name you choosed in place of main.xml
        setContentView(R.layout.qrcodescan);  

        ....    

        // Later you will choose if you let the TextView and the Button or not. Personnaly, I removed it to just keep the test if (barcodescanned) and its content.
        scanText = (TextView)findViewById(R.id.scanText);

        scanButton = (Button)findViewById(R.id.ScanButton);

        scanButton.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    if (barcodeScanned) {
                        barcodeScanned = false;
                        scanText.setText("Scanning...");
                        mCamera.setPreviewCallback(previewCb);
                        mCamera.startPreview();
                        previewing = true;
                        mCamera.autoFocus(autoFocusCB);
                   }
               }
        });

    }

    public void onPause() {
        super.onPause();
        releaseCamera();
    }

    ...............

    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) {
                        scanText.setText("barcode result " + sym.getData());
                        barcodeScanned = true;

                        // Here is what you have to add to return the result to your application
                        textScanned = sym.getData();
                        activityResult.putExtra("SCANNED", textScanned);
                        setResult(RESULT_OK, activityResult);
                        finish();
                    }
                }
            }
        };

    // Mimic continuous auto-focusing
    AutoFocusCallback autoFocusCB = new AutoFocusCallback() {
            public void onAutoFocus(boolean success, Camera camera) {
                autoFocusHandler.postDelayed(doAutoFocus, 1000);
            }
        };
}

이제 애플리케이션에서 :

스캔을 시작하려는 곳; 더하다:

     Intent intent = new Intent(this, QRCodeScanActivity.class);
     startActivityForResult(intent, QRCodeScanActivity.ACTIVITY_SCAN_CODE);

결과를받는 데 필요한 코드가 있어야합니다.

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == QRCodeScanActivity.ACTIVITY_SCAN_CODE) {
         String textScanned = intent.getStringExtra("SCANNED");
         ....
    }
}

그것은 매우 잘 작동합니다.

문안 인사,

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Flow를 얼마나 올바르게 업데이트합니까?

분류에서Dev

그룹의 첫 번째 시퀀스 끝을 올바르게 표시하려면 어떻게해야합니까?

분류에서Dev

CodeIgniter : 첫 번째 쿼리 결과를 기반으로 두 개의 쿼리를 서로 올바르게 실행하려면 어떻게해야합니까?

분류에서Dev

CSS 요소의 첫 번째 인스턴스를 올바르게 정렬 할 수 없습니다.

분류에서Dev

수평 RecyclerView에서 첫 번째 항목과 마지막 항목을 올바르게 중앙에 배치하려면 어떻게해야합니까?

분류에서Dev

배열의 첫 번째, 마지막, 두 번째, 두 번째에서 마지막 등의 요소를 어떻게 출력합니까?

분류에서Dev

첫 번째 작업에 대해 배열 목록에서 데이터를 올바르게 검색하려면 어떻게해야합니까?

분류에서Dev

첫 번째 작업에 대해 배열 목록에서 데이터를 올바르게 검색하려면 어떻게해야합니까?

분류에서Dev

첫 번째 내부에 절대 위치가있을 때 외부 div를 올바르게 스택하려면 어떻게해야합니까?

분류에서Dev

DRY를 따르기 위해이 PHP 코드를 얼마나 올바르게 개선합니까?

분류에서Dev

Java : 배열의 첫 번째 항목이 올바르게 표시되지 않음

분류에서Dev

Android 프로젝트의 res / drawable / 폴더로 이미지를 얼마나 올바르게 검색합니까?

분류에서Dev

JQuery Cycle 2 : 첫 번째 슬라이드의 인덱스를 올바르게 표시하는 방법은 무엇입니까?

분류에서Dev

Listview의 다운로드 된 이미지 첫 번째 행은 Android를 올바르게 표시하기 전에 모든 이미지를 섞습니다.

분류에서Dev

jQuery를 사용하여 여러 요소를 나란히 배치 한 후 첫 번째 요소의 (추가) 패딩 / 여백은 얼마입니까?

분류에서Dev

그리드보기-첫 번째 및 마지막 위치의 첫 번째 항목

분류에서Dev

Android Java : 정렬 된 데이터를 listView에 얼마나 올바르게 전송합니까?

분류에서Dev

프로그래밍 방식으로 EditText를 Fragment에 얼마나 올바르게 추가합니까?

분류에서Dev

표준 C 함수는 첫 번째 호출에서 느립니다.이 문제를 올바르게 해결하는 방법은 무엇입니까?

분류에서Dev

부트 스트랩 4 카드 데크 열 수 및 첫 번째 및 마지막 항목의 여백을 올바르게 설정

분류에서Dev

C # 문자열의 첫 번째 문자를 마지막 문자로 어떻게 바꿀 수 있습니까?

분류에서Dev

R을 사용하여 하위 집합의 첫 번째 행과 마지막 행을 다르게 처리하는 방법은 무엇입니까?

분류에서Dev

두 개의 프로세스를 시작하려면 어떻게해야합니까? 그래서 첫 번째는 두 번째가 끝나면 끝나나요?

분류에서Dev

순간 JS가 첫 번째주의 올바른 주 번호를 얻습니다.

분류에서Dev

내 코드가 작동하고 첫 번째 줄이 올바르게 표시되지만 두 번째 줄은 첫 번째 줄과 연결됩니다.

분류에서Dev

첫 번째가 완전히 완료된 후에 만 하나의 Jquery 함수를 어떻게 실행합니까?

분류에서Dev

IntPtr에서 구조체 배열 마샬링-첫 번째 값 마샬 만 올바르게 마샬링

분류에서Dev

누군가 나에게 두 번째 for 루프를 설명 할 수 있습니까 .. 나는 이미 첫 번째 루프를 이해합니다 .. 감사합니다

분류에서Dev

Socket DataOutputStream은 첫 번째 바이트 만 올바르게 보내는 것 같습니다.

Related 관련 기사

  1. 1

    Flow를 얼마나 올바르게 업데이트합니까?

  2. 2

    그룹의 첫 번째 시퀀스 끝을 올바르게 표시하려면 어떻게해야합니까?

  3. 3

    CodeIgniter : 첫 번째 쿼리 결과를 기반으로 두 개의 쿼리를 서로 올바르게 실행하려면 어떻게해야합니까?

  4. 4

    CSS 요소의 첫 번째 인스턴스를 올바르게 정렬 할 수 없습니다.

  5. 5

    수평 RecyclerView에서 첫 번째 항목과 마지막 항목을 올바르게 중앙에 배치하려면 어떻게해야합니까?

  6. 6

    배열의 첫 번째, 마지막, 두 번째, 두 번째에서 마지막 등의 요소를 어떻게 출력합니까?

  7. 7

    첫 번째 작업에 대해 배열 목록에서 데이터를 올바르게 검색하려면 어떻게해야합니까?

  8. 8

    첫 번째 작업에 대해 배열 목록에서 데이터를 올바르게 검색하려면 어떻게해야합니까?

  9. 9

    첫 번째 내부에 절대 위치가있을 때 외부 div를 올바르게 스택하려면 어떻게해야합니까?

  10. 10

    DRY를 따르기 위해이 PHP 코드를 얼마나 올바르게 개선합니까?

  11. 11

    Java : 배열의 첫 번째 항목이 올바르게 표시되지 않음

  12. 12

    Android 프로젝트의 res / drawable / 폴더로 이미지를 얼마나 올바르게 검색합니까?

  13. 13

    JQuery Cycle 2 : 첫 번째 슬라이드의 인덱스를 올바르게 표시하는 방법은 무엇입니까?

  14. 14

    Listview의 다운로드 된 이미지 첫 번째 행은 Android를 올바르게 표시하기 전에 모든 이미지를 섞습니다.

  15. 15

    jQuery를 사용하여 여러 요소를 나란히 배치 한 후 첫 번째 요소의 (추가) 패딩 / 여백은 얼마입니까?

  16. 16

    그리드보기-첫 번째 및 마지막 위치의 첫 번째 항목

  17. 17

    Android Java : 정렬 된 데이터를 listView에 얼마나 올바르게 전송합니까?

  18. 18

    프로그래밍 방식으로 EditText를 Fragment에 얼마나 올바르게 추가합니까?

  19. 19

    표준 C 함수는 첫 번째 호출에서 느립니다.이 문제를 올바르게 해결하는 방법은 무엇입니까?

  20. 20

    부트 스트랩 4 카드 데크 열 수 및 첫 번째 및 마지막 항목의 여백을 올바르게 설정

  21. 21

    C # 문자열의 첫 번째 문자를 마지막 문자로 어떻게 바꿀 수 있습니까?

  22. 22

    R을 사용하여 하위 집합의 첫 번째 행과 마지막 행을 다르게 처리하는 방법은 무엇입니까?

  23. 23

    두 개의 프로세스를 시작하려면 어떻게해야합니까? 그래서 첫 번째는 두 번째가 끝나면 끝나나요?

  24. 24

    순간 JS가 첫 번째주의 올바른 주 번호를 얻습니다.

  25. 25

    내 코드가 작동하고 첫 번째 줄이 올바르게 표시되지만 두 번째 줄은 첫 번째 줄과 연결됩니다.

  26. 26

    첫 번째가 완전히 완료된 후에 만 하나의 Jquery 함수를 어떻게 실행합니까?

  27. 27

    IntPtr에서 구조체 배열 마샬링-첫 번째 값 마샬 만 올바르게 마샬링

  28. 28

    누군가 나에게 두 번째 for 루프를 설명 할 수 있습니까 .. 나는 이미 첫 번째 루프를 이해합니다 .. 감사합니다

  29. 29

    Socket DataOutputStream은 첫 번째 바이트 만 올바르게 보내는 것 같습니다.

뜨겁다태그

보관