안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요
지금 zxing을 이용하여 qr 코드 스캐너를 직접 구현하려고 하는데요
폰에 바코드 스캐너가 깔려있지 않아도 실행이 되도록 만들려고 합니다.
일단 다음 소스입니다.
package com.zxing_Test;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.google.zxing.integration.android.IntentResult;
public class zxing_Test extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentIntegrator.initiateScan(this);
findViewById(R.id.scan_qr_code).setOnClickListener(mScanQRCode);
}
public final Button.OnClickListener mScanQRCode = new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
Log.v("Logcat", "start activity");
startActivityForResult(intent, 0);
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanResult =
IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanResult != null){
if(scanResult.getFormatName() == "QR_CODE"){
String contents = scanResult.getContents();
String format = scanResult.getFormatName();
//tv.setText("바코드정보 : " + contents + " - " + format);
}else{
String contents = scanResult.getContents();
String format = scanResult.getFormatName();
//tv.setText("바코드정보 : " + contents + " - " + format);
}
}
}
}
위의 빨간색 글씨처럼 보이는데로
zxing의 폴더안에 있는 android-integration 부분을 패키지로 추가하여 import 시켜 주었습니다.
정확한 패키지 명은 com.google.zxing.integration.android 이며
소스 파일은 IntentIntegrator, IntentResult 두개가 존재합니다.
이렇게 하고 에러가 없길래 돌려봤는데
자꾸 에러가 뜹니다.
다음은 해당 부분의 오류 부분입니다..
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): FATAL EXCEPTION: main
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.google.zxing.client.android.SCAN (has extras) }
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.Activity.startActivityForResult(Activity.java:2827)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.Activity.startActivity(Activity.java:2933)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at com.zxing_Test.zxing_Test$1.onClick(zxing_Test.java:38)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.view.View.performClick(View.java:2485)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.view.View$PerformClick.run(View.java:9080)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.os.Handler.handleCallback(Handler.java:587)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.os.Handler.dispatchMessage(Handler.java:92)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.os.Looper.loop(Looper.java:123)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at java.lang.reflect.Method.invokeNative(Native Method)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at java.lang.reflect.Method.invoke(Method.java:507)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at dalvik.system.NativeStart.main(Native Method)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.google.zxing.client.android.SCAN (has extras) }
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.Activity.startActivityForResult(Activity.java:2827)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.Activity.startActivity(Activity.java:2933)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at com.zxing_Test.zxing_Test$1.onClick(zxing_Test.java:38)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.view.View.performClick(View.java:2485)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.view.View$PerformClick.run(View.java:9080)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.os.Handler.handleCallback(Handler.java:587)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.os.Handler.dispatchMessage(Handler.java:92)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.os.Looper.loop(Looper.java:123)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at java.lang.reflect.Method.invokeNative(Native Method)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at java.lang.reflect.Method.invoke(Method.java:507)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-01 20:56:19.816: ERROR/AndroidRuntime(8328): at dalvik.system.NativeStart.main(Native Method)
왜 안돼는지 도저히 모르겠습니다.
조언 부탁드리겠습니다.




zxing 오픈소스 통째로 가져다가 커스터마이징 해야 스케너 안깔고 사용할 수 있는거 아녀욤?
전 원zxing 소르를 통째로 가따가 화면바꾸고 패키지명 바꾸고 입맛대로 바꿔서 썻었네염
원체 zxing소스가 복잡하고 파일도 많아서 필요한것만 가따써서는 앵간하면 Activity가 연결대있어서..
다 임포트를 못하셔서 못찾는거 같네염