소개
Zebra 기술는 바코드 인쇄, 모바일 컴퓨팅, 데이터 캡처 및 관련 기능 분야의 글로벌 리더입니다. Zebra는 바코드 스캐너가 내장된 견고한 핸드헬드 컴퓨터 제품군을 제공합니다. 이러한 안드로이드 기반 디바이스는 배송 추적, 판매 지원, 자산 관리 등 다양한 용도로 사용할 수 있습니다.
이러한 애플리케이션 중 상당수는 카우치베이스 모바일 스택을 제공하여 백업 데이터 플랫폼을 제공합니다. Couchbase Lite는 본격적인 NoSQL 데이터베이스이므로 온디바이스 데이터의 성능과 손쉬운 오프디바이스 동기화가 결합되어 있습니다.
한 가지 사용 사례를 보여드리기 위해 샘플 재고 스캔 애플리케이션을 구축했습니다.

스크린샷
데이터는 가상의 책 세트에 대한 정보로 구성됩니다. ISBN 바코드를 스캔하면 다음에서 정보를 가져옵니다. 카우치베이스 라이트 임베디드 데이터베이스를 사용합니다. 이 데이터베이스는 Zebra DataWedge ISBN 바코드 스캔을 위한 서비스입니다.
샘플 데이터와 함께 전체 애플리케이션은 GitHub에서 확인할 수 있습니다. 여기. 이 게시물에서는 코드를 살펴보겠습니다. 데모가 실제로 작동하는 모습을 보고 Zebra와 Couchbase에 대해 자세히 알아보려면 이 Zebra DEVTALK 웨비나를 시청하십시오.
개요
애플리케이션은 단일 활동으로 구성됩니다. 카우치베이스 라이트는 프로젝트에 라이브러리로 통합됩니다. 애플리케이션은 데이터 없이 설치됩니다. 인벤토리 데이터는 Couchbase Server에 저장됩니다. 디바이스 데이터는 양방향 복제를 사용하여 런타임에 채워집니다.
DataWedge는 기기에서 별도의 구성 요소로 실행됩니다. API는 전적으로 인텐트에서 구동됩니다. 인텐트를 브로드캐스팅하여 스캔을 트리거하고 인텐트를 통해 데이터를 가져옵니다. 이를 활성화하려면 DataWedge 프로필을 애플리케이션과 연결합니다. (이렇게 하면 DataWedge는 무엇보다도 결과를 반환할 때 앱을 구체적으로 타겟팅할 수 있습니다.)
코드(UI 작업 제외)는 데이터베이스 설정, 복제 시작, 스캔 트리거 버튼 추가 등으로 구성되어 있습니다. 스캔 결과가 반환되면(ISBN을 떠올려 보세요) 앱은 데이터베이스에서 책 세부 정보를 쿼리하여 표시합니다. (참고로 멀티 스레딩을 처리하기 위해 RxJava를 사용합니다.)
Zebra 데이터웨지 프로필
DataWedge는 안드로이드 인텐트 시스템을 우아하게 활용합니다. 이를 위해서는 프로필 구성이 필요합니다. 이 스크린샷은 여기에 사용된 옵션을 보여줍니다.

스캔 사용

인텐트 사용
특히 '인텐트 액션' 설정에 주목하세요. 애플리케이션 자체에도 동일한 문자열이 필요합니다.
데이터베이스 초기화 및 복제 시작
앱을 컴팩트하게 유지하기 위해 데이터베이스를 초기화합니다. onCreate
메서드의 스캔 활동
클래스를 생성합니다. 또한 거기에서 복제를 설정합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// com/couchbase/mobile/zebra/ScanActivity.java 시도 { 데이터베이스 구성 구성 = new 데이터베이스 구성(애플리케이션 컨텍스트 가져오기()); 데이터베이스 = new 데이터베이스("인벤토리", 구성); 엔드포인트 대상 엔드포인트 = new URL엔드포인트(new URI("ws://localhost:4984/인벤토리")); 리플리케이터 구성 repConfig = new 리플리케이터 구성(데이터베이스, 대상 엔드포인트) .setReplicatorType(리플리케이터 구성.리플리케이터 유형.PUSH_AND_PULL) .setAuthenticator(new 기본 인증자("user", "비밀번호")) .setContinuous(true); 리플리케이터 리플리케이터 = new 리플리케이터(repConfig); 리플리케이터.시작(); } catch(카우치베이스 라이트 예외 | URISyntax 예외 ex) { ex.프린트스택트레이스(); } |
이것은 모두 간단합니다. 엔드포인트는 동기화 게이트웨이 인스턴스의 주소입니다. 복제를 다음 주소로 설정합니다. 연속
를 사용하면 Couchbase가 백그라운드에서 데이터베이스를 지속적으로 업데이트합니다.
소프트 스캔 버튼
Zebra 디바이스에는 스캔을 트리거하는 전용 하드웨어가 있습니다. 이를 위해 UI에 버튼도 추가했습니다. 버튼 클릭에 대한 콜백은 DataWedge 인텐트 기반 API를 사용하는 방법을 보여줍니다. 몇 가지 키 문자열로 인텐트를 채우고 나머지는 안드로이드가 처리하도록 맡기면 됩니다.
1 2 3 4 5 6 |
소프트 스캔 버튼.설정온클릭 리스너(보기 -> { 의도 의도 = new 의도(); 의도.setAction(데이터웨지_액션); 의도.putExtra(데이터웨지_소프트_스캔 트리거, 데이터 웨지 토글 스캐닝); sendBroadcast(의도); }); |
스캔 결과 받기
트리거되면 스캐너에 불이 켜지고 백그라운드에서 데이터를 캡처합니다. 성공하면 인텐트를 사용하여 바코드 정보가 반환됩니다.
다음을 사용하여 의도를 전달하도록 DataWedge를 구성했습니다. 시작 활동
. 여기에서 인텐트 액션
설정이 프로필에서 작동합니다. Android 매니페스트에서 해당 설정의 문자열과 일치하도록 인텐트 필터를 설정합니다.
기본적으로 이렇게 하면 일반적으로 해당 활동의 새 인스턴스가 생성됩니다. 여기서는 동일한 활동을 계속 진행하면서 그 결과를 처리하도록 하려고 합니다. 활동 시작 모드를 다음과 같이 설정하여 이를 수행합니다. 싱글탑
.
즉, 인텐트는 다음을 통해 전달됩니다. onNewIntent
메서드를 사용할 수 있습니다. 이는 처음 활동을 시작한 원래의 의도에 영향을 미치지 않습니다. 활동의 인텐트를 새로운 인텐트로 재설정하는 일반적인 패턴을 사용합니다. onNewIntent
에서 처리한 다음 onResume
.
쿼리 설정
내부 onResume
를 입력하면 의도가 예상한 것과 일치하는지 확인합니다. 그런 다음 ISBN 번호를 가져와 쿼리를 수행합니다.
카우치베이스 라이트는 빌더 스타일의 인터페이스를 사용하여 쿼리를 생성합니다. 이 API는 SQL 문에 직접 매핑되도록 설계되었습니다. 여기서 해당하는 SQL은 다음과 같습니다. SELECT * FROM inventory WHERE isbn = "";
에서 <scan result>
는 우리에게 다시 전달된 문자열을 나타냅니다.
이는 곧 이 코드로 해석됩니다.
1 2 3 4 5 6 7 8 |
문자열 isbn = 의도.getStringExtra(데이터웨지_인텐트_데이터); ... 쿼리 쿼리 = 쿼리 빌더 .선택(SelectResult.모두()) .에서(데이터 소스.데이터베이스(데이터베이스)) .어디(표현식.속성("isbn").equalTo(표현식.문자열(isbn))); |
이 동적 쿼리 기능은 Couchbase Lite 2.0에 추가되었습니다. 이 기능은 SQL의 상위 집합인 Couchbase의 N1QL 쿼리 언어를 기반으로 합니다. Couchbase Lite의 쿼리에 대한 자세한 소개는 다음을 읽어보시기 바랍니다. 이 블로그 게시물.
쿼리 실행 및 결과
쿼리 객체를 손에 들고 쿼리를 실행하여 결과를 목록으로 검색합니다. 각 ISBN은 한 권의 책에 해당할 것으로 예상합니다. 성공하면 책 표지의 썸네일과 기타 정보를 표시합니다. 책이 누락되었거나 결과가 두 개 이상이면 책 표지 대신 오류를 표시합니다. 이 코드는 RxJava를 사용하여 래핑되어 쿼리가 백그라운드 스레드에서 실행됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
시도 { 결과 = 쿼리.실행().모든 결과(); } catch(카우치베이스 라이트 예외 ex) { 출처.onError((ex)); } 만약 (0 == 결과.크기()) { 정보 = 경고("실종"); } else 만약 (1 < 결과.크기()) { 정보 = 경고("Duplicate"); } else { 사전 결과 = 결과.get(0).getDictionary(데이터베이스.getName()); 정보 = 결과.toMap(); 입력 스트림 는 = 결과.getBlob("커버").getContentStream(); 비트맵 썸네일 = 비트맵 팩토리.decodeStream(는); 정보.put("썸네일", 썸네일); } |
전체 문서 내용을 Dictionary 객체로 검색합니다. (사전은 Couchbase Lite에서 정의한 맵과 같은 의미를 가진 불변의 데이터 구조입니다.) 블롭으로 첨부된 책 표지 이미지를 비트맵으로 변환해야 합니다. 편의를 위해 사전을 맵으로 변환하고 비트맵을 만든 다음 맵에 추가합니다. 그러면 UI 코드에 전달됩니다.
마무리
이 프로젝트의 GitHub 리포지토리에는 프로젝트를 실행하는 데 필요한 모든 추가 기능이 있습니다. 동기화 게이트웨이 구성 파일이 있으며, 로컬 Couchbase Server 인스턴스와 통신하도록 설정되어 있습니다. 몇 가지 샘플 바코드가 포함된 PDF도 찾을 수 있습니다.
앱에 바코드 스캔을 통합하는 방법에 대해 자세히 알아보려면 다음을 방문하세요. https://developer.zebra.com.