2016-11-21 13 views
0

私はインターネット上で答えを探しています。Androidスタジオ - フラグメントからQRコードスキャナーを開始

問題は、アプリでQRコードスキャナーを実装する方法が多数見つかりました。

これは、次のいずれかの方法である:

 scan_btn = (Button) view.findViewById(R.id.scan_btn); 
    scan_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      IntentIntegrator integrator = new IntentIntegrator(getActivity()); 
      integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES); 
      integrator.setPrompt("Scan!!"); 
      integrator.setCameraId(0); 
      integrator.setBeepEnabled(false); 
      integrator.setBarcodeImageEnabled(false); 
      integrator.initiateScan(); 
     } 
    });  

は今、私はそれがフラグメントで動作するように取得したいです。 問題は、それが新しい活動(QRコードリーダー) を開始し、あるQRコード をスキャンしかし、私は私のonActivityResultで応答を取得いけない:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 

    if (result != null) { 
     if (result.getContents() == null) { 
      System.out.println("Cancelled"); 
      Toast.makeText(getActivity(), "You cancelled the scanning!", Toast.LENGTH_LONG).show(); 
     } else { 
      System.out.println("Worked: " + result.getContents()); 
      Toast.makeText(getActivity(), "scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); 
     } 
    } else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

しかし、何が間違って起こっていますか?

私はそれがこの部分に関係していると思います:

IntentIntegrator integrator = new IntentIntegrator(getActivity());  

それは活動を取得しますが、それは代わりに、活動の、フラグメントです。 どうすればこの問題を解決できますか?

フラグメントを保持し、結果を得る自分のアクティビティに最初に通信しますか? 助けてください、ありがとう:)

+0

コンストラクタでgetActivityの代わりにフラグメントを渡すだけです –

答えて

0

私はonActivityResultの実装があなたのFragmentにあると思いますか?

FragmentIntentIntegrator実装が正しいです。したがって、あなたのonActivityResultコードをフラグメントから削除し、それをアクティビティに配置してください。

私も同様の問題があり、これが私の解決策でした。

+0

ありがとうございました、これが問題でした! –

1

多分あなたはこの記事の答えを見つけるでしょう。

onActivityResult is not being called in Fragment

そうしないと、あなたはあなたのコードについて、もう少し情報を共有する必要があります。ボタンの蟻は、フラグメントやアクティビティ自体に添付されていますか?表示されたonActivityResultメソッドは、フラグメントクラスに実装されていますか?

+0

彼はあなたの問題に対する正しい応答を共有しました。IntentIntegratorクラスのライン338をチェックしてください - > https://github.com/zxing/zxing/blob/master/android-integration /src/main/java/com/google/zxing/integration/android/IntentIntegrator.java、コンストラクタへの受け渡しアクティビティがフラグメントであるため、結果が正しく返されません –

関連する問題