마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Android Zxing 스캔 후 Activity 로 돌아오는 방법좀..

0 추천

현재 MainActivity 에서

Intent intent = new Intent( MainActivity.this, CaptureActivity.class );
    intent.putExtra("SCAN_MODE", "QR_CODE_MODE");

    startActivityForResult(intent, 1);

 

이렇게 호출하면서

 

@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data){
  if(requestCode==1) {
         if ( resultCode == RESULT_OK ) {
           Bitmap bm = (Bitmap)data.getExtras().get("bm");
          barcode.setImageBitmap(bm);
         }
  }
 }

 

이렇게 받고 있습니다. 그런데 zxing 에서 바코드 스캔 후 바코드 이미지만 화면에 뿌릴 뿐 전 Activity 로 돌아오지 않고 있습니다.

어디 부분을 수정해야 될지 도움이 필요해서 질문합니다.

 

제가 보기엔 handleDecodeInternally 함수나 handleDecode() 함수에서 어떻게 하면 될꺼같은데 ㅠ.ㅠ 전혀 감이 안오네요~! 혹시 알고 계시는 분들은 제게 도움을 주세요 ㅠ.ㅠ

닉네임입니다 (120 포인트) 님이 2016년 5월 23일 질문

1개의 답변

0 추천
DecodeHandler.java 파일에 decode메소드 보시면 if (rawResult != null) {} 이 코드가있을거에요
.. 여기가 qr코드 스캔하고 값 읽어오는곳인데 여기다가 액티비티이동을시키든지 finish()줘서 
qr코드를 종료시키든지 하시면될고ㅓ같습니다.

 

sadeva (21,550 포인트) 님이 2016년 5월 23일 답변
decode 함수에서 어떻게 이동하나요? setresult나 finish() 함수는 먹히지 않는데...ㅠ.ㅠ
DecodeHandler 클래스에다가
private final CaptureActivity activity; 선언하시고

finish 할려는 부분에다가 activity.finish();해보세요..
와 감사합니다~! finish()가 되네요 근데! 너무너무 죄송한데 ㅠ.ㅠ 하나만 더 질문 올릴꼐요 저는 finish()로 끝내고 싶은게 아니라 setresult 로 바코드 이미지나 바코드 정보를 넘기면서 MainActivity로 보내고 싶은데 이럴 땐 어떻게 하나요?
그렇게작업하실거면 finish()부분에다가 activity.test_function(바코드정보); 이런식으로 정의하신다음에 captureactivity 로 가셔서

 public void test_function(String 바코드정보){

//여기다가 Intent intent = new Intent(getApplicationContext(),이동하고싶은클래스.class);
startActivityForResult(intent, request_code);
}

이런식으로 하면되지 않을까싶습니다 그후 값을 받는 페이지에서 onActivityResult 구현하셔서 값을 받으시면될거같네요~
captureactivity 에서 함수를 말씀드린 대로 만들었습니다.

근데 너무 ㅠ.ㅠ 귀찮게 해서 죄송하지만 제가 이해를 못한건지..

저는 MainActivity 에서

Intent intent = new Intent( MainActivity.this, CaptureActivity.class );
                intent.putExtra("SCAN_MODE", "NATIVE_APP_INTENT");

                startActivityForResult(intent, 1);

captureactivity 를 호출하고 있습니다. 그리고 말씀하신대로 함수를

public void send_qrcode(Result rawResult, Bitmap barcode){
      Intent intent = new Intent(getApplicationContext(),MainActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
      intent.putExtra(Intents.Scan.RESULT, rawResult.toString());
      intent.putExtra(Intents.Scan.RESULT_FORMAT, rawResult.getBarcodeFormat().toString());
      intent.putExtra("bm", (Bitmap) barcode);
      Toast.makeText(getApplicationContext(), "dd", Toast.LENGTH_SHORT);
      startActivityForResult(intent, 1);
      finish();
  }
이렇게 만들어서 보냈는데 MainActivity 에서

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode==1) {
            if ( resultCode == RESULT_OK ) {
                    Toast.makeText(getApplicationContext(), "dd", Toast.LENGTH_SHORT);
                 Bitmap bm = (Bitmap)data.getExtras().get("bm");
                 barcode2.setImageBitmap(bm);
            }
        }
    }

함수에 들어오지 않고 있습니다. ㅠ.ㅠ

send_qrcond 함수에서 setResult(RESULT_OK, intent); 로 변경해도

MainActivity 에서 onActivityResult 함수에 들어오지가않았습니다 .ㅠ ㅠ

ㅠ.ㅠ 바쁘시고 귀찮겠지만 조금 더 자세한 설명좀 해주세요 ㅠ.ㅠ
send_qrcode 메소드 dd 토스트 메세지는 나오시나여? 나오신다면 onActivityResult requestcode == 1 윗줄에 토스트메세지 넣어서 저기까지 접근하는지 확인해보셔야할거같습니다.
아니요 ㅠ.ㅠ 토스트 메시지도 나오지 않고 있습니다 ㅠ.ㅠ
근데 디버깅 찍어서 확인하면 send_qrcode에는 들어오는데 ㅠ.ㅠ
intent.putExtra(Intents.Scan.RESULT, rawResult.toString());
      intent.putExtra(Intents.Scan.RESULT_FORMAT, rawResult.getBarcodeFormat().toString());
      intent.putExtra("bm", (Bitmap) barcode);  여기 값들 다 로그직어서 정상적으로 들어오나 확인해보세여.
네 로그 찍으니 제대로 찍히는데 ㅠ.ㅠ

Intent intent = getIntent();
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
      intent.putExtra(Intents.Scan.RESULT, rawResult.toString());
      Log.w(TAG, "init"+rawResult.toString());
      intent.putExtra(Intents.Scan.RESULT_FORMAT, rawResult.getBarcodeFormat().toString());
      Log.w(TAG, "init"+rawResult.getBarcodeFormat().toString());
      intent.putExtra("bm", (Bitmap) barcode);
      Toast.makeText(getApplicationContext(), "dd", Toast.LENGTH_SHORT);
      setResult(RESULT_OK, intent);
      finish();

근데 저 intent = getIntent(); 으로 바꿔서 했는데 ㅠ.ㅠ

onActivityResult 함수에 들어오지가않았습니다 .ㅠ ㅠ
아 감사합니다 ㅠ.ㅠ intent.putExtra("bm", (Bitmap) barcode); 이부분이 잘못되서 onActivityResult 함수가 실행되고 있찌 않았습니다 ㅠ.ㅠ 너무 감사합니다
ㅎㅎ 되셨다니 다행이네요
...