Android에서 바코드 스캐너 구현
소개
카메라나 GPS등 하드웨어 의존의 기능을 만들 때, 스마트폰은 편리하네요.
앱판 밖에 없는 기능을 담는 것으로, Web판과의 차별화도 할 수 있습니다.
이번에는 Android에서 バーコードスキャナー
기능을 구현하고 싶습니다.
실행 환경
zxing-android-embedded : 4.1.0
설치
diff --git a/app/build.gradle b/app/build.gradle
index be61190..22efbee 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,6 +6,11 @@ android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
defaultConfig {
applicationId "com.example.barcodescanner"
minSdkVersion 24
@@ -29,6 +34,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
기본은 GitHub README에 따라 build.gradle
gradle을 실행하면 설치됩니다.
주요 활동 만들기
package com.example.barcodescanner
import android.annotation.SuppressLint
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.google.zxing.integration.android.IntentIntegrator
import com.google.zxing.integration.android.IntentResult
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
val intentIntegrator = IntentIntegrator(this).initiateScan()
}
@SuppressLint("ShowToast")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
{
val result: IntentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
if (null != result) {
val barcodeValue = result.contents
if (null == barcodeValue) {
Toast.makeText(this, "Read Error", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this, barcodeValue, Toast.LENGTH_LONG).show()
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
}
IntentIntegrator
에서 처리를 바코드 스캐너로 이전합니다.onActivityResult
실장시의 작법으로서,
호출원이 상정되고 있는 기능인 것을 보증하기 위해서, resultCode
의 값을 맞대거나 합니다만,
Zxing에서는 그 변의 처리를 parseActivityResult()
로 실시하고 있습니다.
매니페스트에 등록
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 227c879..1e9db0a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.barcodescanner">
@@ -7,6 +8,14 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
- android:theme="@style/AppTheme" />
+ android:theme="@style/AppTheme"
+ android:hardwareAccelerated="true">
+ <activity android:name=".MainActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
</manifest>
메인 액티비티를 매니페스트에 등록합니다.
이 때 application
태그의 속성에 android:hardwareAccelerated=true
를 추가하십시오.
실행
응용 프로그램을 시작하면 바코드 스캐너가 표시됩니다.
바코드를 스캔하면 값이 팝업으로 표시됩니다.
기타 설정
경고음을 OFF로 설정
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..0fdb9ba 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this)
+ .setBeepEnabled(false)
+ .initiateScan()
}
@SuppressLint("ShowToast")
IntentIntegrator 의 인스턴스 생성시, 메소드 체인으로 setBeepEnabled()
를 호출합니다.
이 때 인수에 false를 전달하면 경고음이 꺼집니다.
메시지 설정
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..a591c19 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this)
+ .setPrompt("Test Message")
+ .initiateScan()
}
@SuppressLint("ShowToast")
IntentIntegrator 의 인스턴스 생성시, 메소드 체인으로 setPrompt()
를 호출합니다.
이 때 인수에 문자열을 전달하면 화면의 메시지를 덮어 씁니다.
화면을 가로 회전시키지 않음
package com.example.barcodescanner
import com.journeyapps.barcodescanner.CaptureActivity
class Zxing : CaptureActivity() {}
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..8155461 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this).apply {
+ captureActivity = Zxing::class.java
+ }.initiateScan()
}
@SuppressLint("ShowToast")
CaptureActivity
를 상속한 활동을 만들고 IntentIntegrator를 호출할 때 지정합니다.
후기
OCR 공부 중입니다.
하드웨어 성능도 관련됩니다만, 문자의 읽기 정밀도는 어느 정도입니까?
매우 기대됩니다.
Reference
이 문제에 관하여(Android에서 바코드 스캐너 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aucfan-murakami/items/f2382fe4f4b4954dad63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
diff --git a/app/build.gradle b/app/build.gradle
index be61190..22efbee 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,6 +6,11 @@ android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
defaultConfig {
applicationId "com.example.barcodescanner"
minSdkVersion 24
@@ -29,6 +34,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.1'
implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
package com.example.barcodescanner
import android.annotation.SuppressLint
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.google.zxing.integration.android.IntentIntegrator
import com.google.zxing.integration.android.IntentResult
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
val intentIntegrator = IntentIntegrator(this).initiateScan()
}
@SuppressLint("ShowToast")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
{
val result: IntentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
if (null != result) {
val barcodeValue = result.contents
if (null == barcodeValue) {
Toast.makeText(this, "Read Error", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this, barcodeValue, Toast.LENGTH_LONG).show()
}
} else {
super.onActivityResult(requestCode, resultCode, data)
}
}
}
IntentIntegrator
에서 처리를 바코드 스캐너로 이전합니다.onActivityResult
실장시의 작법으로서,호출원이 상정되고 있는 기능인 것을 보증하기 위해서,
resultCode
의 값을 맞대거나 합니다만,Zxing에서는 그 변의 처리를
parseActivityResult()
로 실시하고 있습니다.매니페스트에 등록
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 227c879..1e9db0a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.barcodescanner">
@@ -7,6 +8,14 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
- android:theme="@style/AppTheme" />
+ android:theme="@style/AppTheme"
+ android:hardwareAccelerated="true">
+ <activity android:name=".MainActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
</manifest>
메인 액티비티를 매니페스트에 등록합니다.
이 때 application
태그의 속성에 android:hardwareAccelerated=true
를 추가하십시오.
실행
응용 프로그램을 시작하면 바코드 스캐너가 표시됩니다.
바코드를 스캔하면 값이 팝업으로 표시됩니다.
기타 설정
경고음을 OFF로 설정
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..0fdb9ba 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this)
+ .setBeepEnabled(false)
+ .initiateScan()
}
@SuppressLint("ShowToast")
IntentIntegrator 의 인스턴스 생성시, 메소드 체인으로 setBeepEnabled()
를 호출합니다.
이 때 인수에 false를 전달하면 경고음이 꺼집니다.
메시지 설정
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..a591c19 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this)
+ .setPrompt("Test Message")
+ .initiateScan()
}
@SuppressLint("ShowToast")
IntentIntegrator 의 인스턴스 생성시, 메소드 체인으로 setPrompt()
를 호출합니다.
이 때 인수에 문자열을 전달하면 화면의 메시지를 덮어 씁니다.
화면을 가로 회전시키지 않음
package com.example.barcodescanner
import com.journeyapps.barcodescanner.CaptureActivity
class Zxing : CaptureActivity() {}
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..8155461 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this).apply {
+ captureActivity = Zxing::class.java
+ }.initiateScan()
}
@SuppressLint("ShowToast")
CaptureActivity
를 상속한 활동을 만들고 IntentIntegrator를 호출할 때 지정합니다.
후기
OCR 공부 중입니다.
하드웨어 성능도 관련됩니다만, 문자의 읽기 정밀도는 어느 정도입니까?
매우 기대됩니다.
Reference
이 문제에 관하여(Android에서 바코드 스캐너 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aucfan-murakami/items/f2382fe4f4b4954dad63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 227c879..1e9db0a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.barcodescanner">
@@ -7,6 +8,14 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
- android:theme="@style/AppTheme" />
+ android:theme="@style/AppTheme"
+ android:hardwareAccelerated="true">
+ <activity android:name=".MainActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
</manifest>
응용 프로그램을 시작하면 바코드 스캐너가 표시됩니다.
바코드를 스캔하면 값이 팝업으로 표시됩니다.
기타 설정
경고음을 OFF로 설정
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..0fdb9ba 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this)
+ .setBeepEnabled(false)
+ .initiateScan()
}
@SuppressLint("ShowToast")
IntentIntegrator 의 인스턴스 생성시, 메소드 체인으로 setBeepEnabled()
를 호출합니다.
이 때 인수에 false를 전달하면 경고음이 꺼집니다.
메시지 설정
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..a591c19 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this)
+ .setPrompt("Test Message")
+ .initiateScan()
}
@SuppressLint("ShowToast")
IntentIntegrator 의 인스턴스 생성시, 메소드 체인으로 setPrompt()
를 호출합니다.
이 때 인수에 문자열을 전달하면 화면의 메시지를 덮어 씁니다.
화면을 가로 회전시키지 않음
package com.example.barcodescanner
import com.journeyapps.barcodescanner.CaptureActivity
class Zxing : CaptureActivity() {}
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..8155461 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this).apply {
+ captureActivity = Zxing::class.java
+ }.initiateScan()
}
@SuppressLint("ShowToast")
CaptureActivity
를 상속한 활동을 만들고 IntentIntegrator를 호출할 때 지정합니다.
후기
OCR 공부 중입니다.
하드웨어 성능도 관련됩니다만, 문자의 읽기 정밀도는 어느 정도입니까?
매우 기대됩니다.
Reference
이 문제에 관하여(Android에서 바코드 스캐너 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/aucfan-murakami/items/f2382fe4f4b4954dad63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..0fdb9ba 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this)
+ .setBeepEnabled(false)
+ .initiateScan()
}
@SuppressLint("ShowToast")
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..a591c19 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this)
+ .setPrompt("Test Message")
+ .initiateScan()
}
@SuppressLint("ShowToast")
package com.example.barcodescanner
import com.journeyapps.barcodescanner.CaptureActivity
class Zxing : CaptureActivity() {}
diff --git a/app/src/main/java/com/example/barcodescanner/MainActivity.kt b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
index 2040542..8155461 100644
--- a/app/src/main/java/com/example/barcodescanner/MainActivity.kt
+++ b/app/src/main/java/com/example/barcodescanner/MainActivity.kt
@@ -14,7 +14,9 @@ class MainActivity : AppCompatActivity()
{
super.onCreate(savedInstanceState)
- val intentIntegrator = IntentIntegrator(this).initiateScan()
+ val intentIntegrator = IntentIntegrator(this).apply {
+ captureActivity = Zxing::class.java
+ }.initiateScan()
}
@SuppressLint("ShowToast")
OCR 공부 중입니다.
하드웨어 성능도 관련됩니다만, 문자의 읽기 정밀도는 어느 정도입니까?
매우 기대됩니다.
Reference
이 문제에 관하여(Android에서 바코드 스캐너 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/aucfan-murakami/items/f2382fe4f4b4954dad63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)