2

オープンソースであるため、バーコードとQRコードのスキャンにzxingスキャナーを使用しました。タブを除いては正常に機能していますが、タブグループで同じコードを使用しましたが、ここでは機能していません。問題は、onActivityResult()が呼び出されないことです。この問題をどのように解決できますか。

code

サブアクティビティ

public class ScannScreenActivity extends Activity 
{  
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.scan, null);
        this.setContentView(viewToLoad);

         mShowCamBut.setOnClickListener(new OnClickListener() {   
                public void onClick(View v) 
                {
                     IntentIntegrator integrator = new IntentIntegrator(ScannScreenActivity.this);
                     integrator.initiateScan();                 
                }                                             
            });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) 
    {
          IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
          if (scanResult != null)
          {

              System.out.println("ScannScreenActivity FormatName:"+scanResult.getFormatName());
              System.out.println("ScannScreenActivity Content:"+scanResult.getContents());
          }       
    }
}

ActivityGroup

public class TabGroupActivity extends ActivityGroup 
{
   //......
  ........Some code

  protected void onActivityResult(int requestCode, int resultCode, Intent data) 
  {

      if (resultCode == Activity.RESULT_OK) 
      {       
          ScannScreenActivity activity = (ScannScreenActivity) getLocalActivityManager().getCurrentActivity();
          activity.onActivityResult(requestCode, resultCode, data);
      }
  }
}

ログ

09-21 11:45:32.448: D/memalloc(10723): /dev/pmem: Unmapping buffer base:0x5239b000 size:8560640 offset:7024640
09-21 11:45:32.458: D/memalloc(10723): /dev/pmem: Unmapping buffer base:0x51f79000 size:4280320 offset:2744320
09-21 11:45:33.949: W/IInputConnectionWrapper(10723): showStatusIcon on inactive InputConnection
09-21 11:45:33.999: W/IInputConnectionWrapper(10723): InputConnection = android.view.inputmethod.BaseInputConnection@40dc2da0, active client = false
4

4 に答える 4

1

IntentIntegratorzxingプロジェクトで提供されるクラスにはいくつかの「フレーバー」があります。IntentIntegrator独自のコードを書くのではなく、を使用する必要があります。そして、あなたは正しいバージョンを使用する必要があります。IntentIntegratorV30メインアクティビティではなくフラグメントに結果を送信できるようにする方法を試してください。あなたは本当にフラグメントを使っているので、これがあなたが必要とするものの本質だと思いますよね?

于 2012-09-21T09:53:55.747 に答える
-1
ScannScreenActivity activity = (ScannScreenActivity) getLocalActivityManager().getCurrentActivity(); 
activity.setResult(resultCode, data);
于 2012-09-21T06:35:44.560 に答える
-1

私の知る限り、結果のアクティビティを開始するたびに、例のonActivityResult()が呼び出されます。

startActivityForResult(intent,KEY);

次にonActivityResultで:

protected void onActivityResult(int requestCode,int resultCode,Intent data){    
    switch(requestCode){
    case KEY:
        if(resultCode==Activity.RESULT_OK)  
            *do whatever you want to *
        }
}
于 2012-09-21T06:48:37.533 に答える
-1

こんな風に使っていたQR-code.sourceをスキャンしてみました。muda2an がお手伝いします。

private void startScanner() {

    try {
        Intent intent = new Intent(Class1.this, CaptureActivity.class);
        intent.setAction(Intents.Scan.ACTION);
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 1);
    } catch (Exception e) {
        e.printStackTrace()
    }
}

@Override
public void onActivityResult(int p_requestCode, int p_resultCode, Intent p_data) {
    try {
        switch (p_requestCode) {
            case 1:
                if (p_resultCode == RESULT_OK) {
                   System.out.println(p_data.getStringExtra("SCAN_RESULT"));
                }
                break;

            default:
                System.out.println("Scan Failed")
                break;
        }
    } catch (Exception e) {
        E.handle(this, e);
    } catch (Error e){
        E.handle(this, e);
    }
}
于 2012-09-21T06:43:56.793 に答える